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

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


mike.pf

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

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

...

 

Δεν είπα κενό και enter: είπα έναν μη-κενό χαρακτήρα και enter! Εάν πατήσει μόνο enter o χρήστης ΔΕΝ παίζει η λύση με την getchar()

Δημοσ.
Δεν είπα κενό και enter: είπα έναν μη-κενό χαρακτήρα και enter! Εάν πατήσει μόνο enter o χρήστης ΔΕΝ παίζει η λύση με την getchar()

Σε 'μενα γιατί παίζει; :confused:(σκέτο getchar(); χωρίς while και λοιπά). Μπορείς να κάνεις ένα post τον κώδικα με την getchar(); Ποιά έκδοση compiler χρησιμοποιείς; (αν θυμάμε καλά έχεις ubuntu)

Δημοσ.
Σε 'μενα γιατί παίζει; :confused:(σκέτο getchar(); χωρίς while και λοιπά). Μπορείς να κάνεις ένα post τον κώδικα με την getchar(); Ποιά έκδοση compiler χρησιμοποιείς; (αν θυμάμε καλά έχεις ubuntu)

 

Ο κώδικας με σκέτης getchar() δεν καταλαβαίνω πώς παίζει σε εσένα: νομίζω ότι ΔΕΝ πρέπει να παίζει, αφού δεν έχεις την εντολή σε loop ώστε να "πιάσει" το πάτημα πλήκτρου! Σε εμένα με σκέτη getchar() φυσικά και τερματίζεται χωρίς να περιμένει να πατήσω τίποτα (και νομίζω ... καλά κάνει!!!)

 

>
#include <iostream>
#include <cstdio>

int main()
{
   std::string* onoma = new(std::string);
   std::cout << "Πώς ονομάζεστε; ";
   std::cin >> *onoma;
   std::cout << "Γεια σας " << *onoma << " και καλώς ήλθατε!" << std::endl;
   delete onoma;
   getchar();
   return 0;
}

Δημοσ.

Εχω την υποψία ότι έχει μείνει το enter στην buffer μετά την ανάγνωση του ονόματος, με την πρώτη ευκαιρία θα το δοκιμασω και θα σου πώ. Και πρέπει να έχει σχέση με το συνδιασμό βιβλιοθηκών c με c++.

 

Δοκίμασε αν μπορείς το παρακάτω:

>
#include <stdio.h>
int main(void){
          printf("press ENTER to continue\n");
          getchar();
          printf("Ok\n");
}

Δημοσ.
Εχω την υποψία ότι έχει μείνει το enter στην buffer μετά την ανάγνωση του ονόματος, με την πρώτη ευκαιρία θα το δοκιμασω και θα σου πώ. Και πρέπει να έχει σχέση με το συνδιασμό βιβλιοθηκών c με c++.

 

Δοκίμασε αν μπορείς το παρακάτω:

>
#include <stdio.h>
int main(void){
          printf("press ENTER to continue\n");
          getchar();
          printf("Ok\n");
}

 

οκ, θα το τσεκάρω σε πρώτη ευκαιρία

Δημοσ.

>
   std::cin >> *onoma;

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

 

Οπότε μετά, καλείς το getchar() και διαβάζει το buffαρισμένο ENTER και γι'αυτο δεν περιμένει. Η getchar() και η getch()[dos/win] πάντα περιμένουν χαρακτήρα (εκτός αν υπάρχει στην buffer).

 

Για να σιγουρευτείς, βάλε δύο getchar(), το ένα μετά το άλλο. Το πρώτο θα φάει το ENTER που ξέμεινε και το δεύτερο περιμένει να ξαναπατηθεί ENTER.

 

Δεν είναι ασυμβατότητα βιβλιοθηκών.

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

 

Οπότε μετά, καλείς το getchar() και διαβάζει το buffαρισμένο ENTER και γι'αυτο δεν περιμένει. Η getchar() και η getch()[dos/win] πάντα περιμένουν χαρακτήρα (εκτός αν υπάρχει στην buffer).

 

Για να σιγουρευτείς, βάλε δύο getchar(), το ένα μετά το άλλο. Το πρώτο θα φάει το ENTER που ξέμεινε και το δεύτερο περιμένει να ξαναπατηθεί ENTER.

 

Δεν είναι ασυμβατότητα βιβλιοθηκών.

 

Φίλε bxenos δίκιο έχεις! Αυτό ακριβώς είναι! Βέβαια, δεν είναι το ίδιο με το "press any key to continue" αλλά είναι αξιοπρεπέστατη λύση! :-)

 

Σημείωση: τουλάχιστον στη C++ η #include <cstdio> ΔΕΝ χρειάστηκε για την getchar()

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

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

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