mike.pf Δημοσ. 3 Απριλίου 2009 Δημοσ. 3 Απριλίου 2009 Καλησπέρα! Θα ηθέλα κάποιος να μου πεί αν ξέρει Κάποια εντολή για να κάνω "pause" την κονσόλα στην c και μία εντόλη οπου όταν θα εκτελέιτε θα κάνει "clear" οτι έχει εκτυπωθεί απο πάνω της.Ευχαριστώ
bxenos Δημοσ. 3 Απριλίου 2009 Δημοσ. 3 Απριλίου 2009 > #include <conio.h> _getch(); //ή #include <conio.h> while(!_kbhit()) ; //ή #include <stdlib.h> system("pause");
greatst Δημοσ. 3 Απριλίου 2009 Δημοσ. 3 Απριλίου 2009 Για τον καθαρισμό είναιSystem("cls"); > #include <conio.h> _getch(); //ή #include <conio.h> while(!_kbhit()) ; //ή #include <stdlib.h> system("pause"); Τα System("cls") και system("pause") θα λειτουργήσουν ΜΟΝΟ σε Windows διότι εκεί υπάρχουν οι αντίστοιχες εντολές (cls, pause) (σωστά?).
bxenos Δημοσ. 3 Απριλίου 2009 Δημοσ. 3 Απριλίου 2009 Σωστά. Στο linux απ'όταν δουλευα κονσόλα έδινα εντολή με ioctrl για να καθαρίσω οθόνη. Ενω το conio είναι ικανοποιητικό και στις δυο περιπτώσεις (το Linux έχει κάτι σαν ncurses.h νομίζω). Υπάρχει βέβαια και η περίπτωση putchar('\f') (form feed) αλλά δεν έχω δοκιμάσει αν παίζει σε οθόνη. ---------- Το μήνυμα προστέθηκε στις 16:08 ---------- Τα System("cls") και system("pause") θα λειτουργήσουν ΜΟΝΟ σε Windows διότι εκεί υπάρχουν οι αντίστοιχες εντολές (cls, pause) (σωστά?). ενοείς dos (msdos,pcdos,...) / windows
greatst Δημοσ. 3 Απριλίου 2009 Δημοσ. 3 Απριλίου 2009 ...ενοείς dos (msdos,pcdos,...) / windows προφανώς!
sarakinos Δημοσ. 4 Απριλίου 2009 Δημοσ. 4 Απριλίου 2009 Παιδιά για να μην ανοίγω και άλλο thread,για να κλείσουμε μια άλλη εφαρμογή μέσα από το πρόγραμμά μας ποια διαδικασία ακολουθούμε ?με την system("exit") ή την exit(0) κλείνει το δικό μας πρόγραμμα..
bxenos Δημοσ. 4 Απριλίου 2009 Δημοσ. 4 Απριλίου 2009 Παιδιά για να μην ανοίγω και άλλο thread,για να κλείσουμε μια άλλη εφαρμογή μέσα από το πρόγραμμά μας ποια διαδικασία ακολουθούμε ?με την system("exit") ή την exit(0) κλείνει το δικό μας πρόγραμμα.. σε linux την κάνεις kill, σε windows της στέλνεις WM_CLOSE στο main window.
greatst Δημοσ. 4 Απριλίου 2009 Δημοσ. 4 Απριλίου 2009 κάτι αντίστοιχο του >system("PAUSE"); για linux?
bxenos Δημοσ. 4 Απριλίου 2009 Δημοσ. 4 Απριλίου 2009 κάτι αντίστοιχο του >system("PAUSE"); για linux? Δεν σου κάνει το απάντων λειτουργικών συστημάτων έγκυρο: > #include <stdio.h> ... getchar(); ...
greatst Δημοσ. 4 Απριλίου 2009 Δημοσ. 4 Απριλίου 2009 Δεν σου κάνει το απάντων λειτουργικών συστημάτων έγκυρο: > #include <stdio.h> ... getchar(); ... Προφανώς εννοείς κάτι σαν το >while(getchar()!='x') {}; Το οποίο εάν μπει πριν το "τέλος" του προγράμματος θα περιμένει να δώσω x ακολουθούμενο από enter ώστε να τερματίσει το πρόγραμμα, το οποίο ΔΕΝ είναι το ίδιο με το ερώτημα μου. Υπάρχει στο λίνουξ κάποια εντολή entoli (σαν την pause των dos/windows) ή κάτι παρόμοιο ώστε να χρησιμοποιήσω στο στυλ >system("entoli"); ???
bxenos Δημοσ. 4 Απριλίου 2009 Δημοσ. 4 Απριλίου 2009 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.
greatst Δημοσ. 4 Απριλίου 2009 Δημοσ. 4 Απριλίου 2009 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. Καλά, μια ερώτηση έκανα, δεν χάθηκε και ο κόσμος να μην βρούμε άκρη!
bxenos Δημοσ. 4 Απριλίου 2009 Δημοσ. 4 Απριλίου 2009 Δεν κάνω παρατήρηση, απλά έχω απορεία, δεν χρειάζεται πάντως να πατήσεις οποιοδήποτε κουμπί. Ζητάς απο τον χρήστη να πατήσει 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.
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.