Προς το περιεχόμενο

Χειρισμός κονσόλας στην c


mike.pf

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπέρα!

Θα ηθέλα κάποιος να μου πεί αν ξέρει Κάποια εντολή για να κάνω "pause" την κονσόλα στην c και μία εντόλη οπου όταν θα εκτελέιτε θα κάνει "clear" οτι έχει εκτυπωθεί απο πάνω της.Ευχαριστώ

Δημοσ.
Για τον καθαρισμό είναι

System("cls");

 

>
#include <conio.h>
        _getch();
        //ή
#include <conio.h>
        while(!_kbhit())
                ;
        //ή
#include <stdlib.h>
        system("pause");

 

Τα System("cls") και system("pause") θα λειτουργήσουν ΜΟΝΟ σε Windows διότι εκεί υπάρχουν οι αντίστοιχες εντολές (cls, pause) (σωστά?).

Δημοσ.

Σωστά. Στο linux απ'όταν δουλευα κονσόλα έδινα εντολή με ioctrl για να καθαρίσω οθόνη. Ενω το conio είναι ικανοποιητικό και στις δυο περιπτώσεις (το Linux έχει κάτι σαν ncurses.h νομίζω). Υπάρχει βέβαια και η περίπτωση putchar('\f') (form feed) αλλά δεν έχω δοκιμάσει αν παίζει σε οθόνη.

 

---------- Το μήνυμα προστέθηκε στις 16:08 ----------

 

Τα System("cls") και system("pause") θα λειτουργήσουν ΜΟΝΟ σε Windows διότι εκεί υπάρχουν οι αντίστοιχες εντολές (cls, pause) (σωστά?).

ενοείς dos (msdos,pcdos,...) / windows

Δημοσ.

Παιδιά για να μην ανοίγω και άλλο thread,για να κλείσουμε μια άλλη εφαρμογή μέσα από το πρόγραμμά μας ποια διαδικασία ακολουθούμε ?με την system("exit") ή την exit(0) κλείνει το δικό μας πρόγραμμα..

Δημοσ.
Παιδιά για να μην ανοίγω και άλλο thread,για να κλείσουμε μια άλλη εφαρμογή μέσα από το πρόγραμμά μας ποια διαδικασία ακολουθούμε ?με την system("exit") ή την exit(0) κλείνει το δικό μας πρόγραμμα..

σε linux την κάνεις kill,

σε windows της στέλνεις WM_CLOSE στο main window.

Δημοσ.
κάτι αντίστοιχο του

 

>system("PAUSE");

 

για linux?

Δεν σου κάνει το απάντων λειτουργικών συστημάτων έγκυρο:

>
#include <stdio.h>
...
getchar();
...

Δημοσ.
Δεν σου κάνει το απάντων λειτουργικών συστημάτων έγκυρο:

>
#include <stdio.h>
...
getchar();
...

 

Προφανώς εννοείς κάτι σαν το

 

>while(getchar()!='x') {};

 

Το οποίο εάν μπει πριν το "τέλος" του προγράμματος θα περιμένει να δώσω x ακολουθούμενο από enter ώστε να τερματίσει το πρόγραμμα, το οποίο ΔΕΝ είναι το ίδιο με το ερώτημα μου.

 

Υπάρχει στο λίνουξ κάποια εντολή entoli (σαν την pause των dos/windows) ή κάτι παρόμοιο ώστε να χρησιμοποιήσω στο στυλ

 

>system("entoli");

 

???

Δημοσ.

To getchar() απο μόνο του, περιμένει (συνήθως) ENTER για να τελειώσει. Δεν χρειάζεται while και ιστορίες, όπως το έγραψα, σκέτο getchar().

Και αυτό γιατί ότι πατάς αποθηκευεται σε buffer (στο αρχείο stdin ή cin) και οι χαρακτήρες διαβάζονται όταν γεμίσει η buffer ή όταν πατηθεί enter.

 

Τώρα αν θες με το ζόρι να μην έχεις portable code και να καλέσεις άλλο process, βάλε read στο system()

 

---------- Το μήνυμα προστέθηκε στις 20:52 ----------

 

>while(getchar()!='x') {};

Μια σημείωση στην παραπάνω εντολή:

το {} δεν χρειάζεται.

 

---------- Το μήνυμα προστέθηκε στις 20:54 ----------

 

Αλήθεια, τι κάνει το pause που δεν μπορείς να κάνεις με το stdio της C;

Ρωτάω γιατί τόσα χρόνια δουλεύω C/C++ και ούτε ως φοιτητής, ούτε σαν προγραμματιστής χρειάστηκε ποτέ να καλέσω εντολές του "φλοιού" (απομεινάρι φλοιού δηλαδή) του dos.

Δημοσ.
To getchar() απο μόνο του, περιμένει (συνήθως) ENTER για να τελειώσει. Δεν χρειάζεται while και ιστορίες, όπως το έγραψα, σκέτο getchar().

Και αυτό γιατί ότι πατάς αποθηκευεται σε buffer (στο αρχείο stdin ή cin) και οι χαρακτήρες διαβάζονται όταν γεμίσει η buffer ή όταν πατηθεί enter.

 

Τώρα αν θες με το ζόρι να μην έχεις portable code και να καλέσεις άλλο process, βάλε read στο system()

 

---------- Το μήνυμα προστέθηκε στις 20:52 ----------

 

Μια σημείωση στην παραπάνω εντολή:

το {} δεν χρειάζεται.

 

---------- Το μήνυμα προστέθηκε στις 20:54 ----------

 

Αλήθεια, τι κάνει το pause που δεν μπορείς να κάνεις με το stdio της C;

 

Μου φαίνεται περισσότερο "καθαρός" ο κώδικας με τις {} ;) Μην σου πω:

 

>
while(getchar()!='x') {
  /* wait for x+enter...
};

 

Το pause κάνει παύση μέχρι να πατηθεί ένα πλήκτρο, ενώ η λύση που προτείνεις απαιτεί το πάτημα ενός πλήκτρου (όχι του κενού) και στη συνέχεια το πάτημα του enter.

 

Καλά, μια ερώτηση έκανα, δεν χάθηκε και ο κόσμος να μην βρούμε άκρη! :-)

Δημοσ.

Δεν κάνω παρατήρηση, απλά έχω απορεία, δεν χρειάζεται πάντως να πατήσεις οποιοδήποτε κουμπί. Ζητάς απο τον χρήστη να πατήσει ENTER (μόνο) και τελειώνει κατεύθειαν. Δεν χρειάζεται δηλαδή και κενό και ENTER.

 

Οπως είπα και παλιότερα στο thread υπάρχουν παιχνίδια με το ioctrl για να κάνουμε άλλα κόλπα, π.χ. (με λίγο googlιασμα)

>
#include <stdio.h>
#include <termios.h>
#include <unistd.h>

int mygetch(void) {
struct termios oldt,newt;
int ch;
tcgetattr( STDIN_FILENO, &oldt );//διάβασε τα flags
newt = oldt;
newt.c_lflag &= ~( ICANON | ECHO );//πείραξε τα (χωρίς buffer, άμεση επιστροφή)
tcsetattr( STDIN_FILENO, TCSANOW, &newt );
ch = getchar();//διάβασε (χωρις buffer)
tcsetattr( STDIN_FILENO, TCSANOW, &oldt ); //επανέφερε τα flags
return ch;
}

Ο δικός μου κώδικας απο τότε που έκανα text applications σε linux είναι συμπιεσμένος στο πατάρι και δεν είναι εύκολο να τον ανακαλέσω, αλλά δούλευα με curses.h μόνο. Με ioctrl έκοβα το buffer στο keyboard.

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...