Το πρόβλημα του κενού χαρακτήρα στη C++ και οι συναρτήσεις gets και puts
Η ανάγνωση αλφαριθμητικών από το STDIN έχει ένα πρόβλημα: σταματά όχι μόνο με το ENTRER αλλά και με τον κενό χαρακτήρα. Έτσι για παράδειγμα δεν μπορούμε να εισάγουμε σε αλφαριθμητικό μια φράση, όπως "Hello World!", επειδή μεσολαβεί ο κενός χαρακτήρας.
Δείτε για παράδειγμα τι θα γίνει:
#include <iostream> using namespace std; int main() { int i; char s[80]; cin >> s; cout << s << endl; return 0; }
Μεταγλώττιση και δοκιμαστική εκτέλεση:
astavrak@apollonia:~$ g++ program.cpp astavrak@apollonia:~$ ./a.out Hello World! Hello
Ο χρήστης δίνει μια φράση με δύο λέξεις, ωστόσο το πρόγραμμα αντιλαμβάνεται και τυπώνει μόνο τη μία: διαβάζει μέχρι να βρει ένα κενό χαρακτήρα και σταματά εκεί.
Το πρόβλημα λύνεται με τη συνάρτηση gets(), η οποία βρίσκεται στη βιβλιοθήκη cstdio:
#include <iostream> #include <cstdio> using namespace std; int main() { char s[80]; gets(s); cout << s << endl; return 0; }
Μεταγλώττιση και δοκιμαστική εκτέλεση:
astavrak@apollonia:~$ g++ program.cpp astavrak@apollonia:~$ ./a.out Hello world! Hello world!
σχολιασμοί, εξωτερικοί σύνδεσμοι, βοήθεια, ψηφοφορίες, αρχεία, κτλ.
Εκπαιδευτικό υλικό από τον
Αθανάσιο Σταυρακούδη
σας παρέχετε κάτω από την άδεια
Creative Commons Attribution-NonCommercial-ShareAlike 4.0 License.
Σας παρακαλώ να ενημερωθείτε για κάποιους επιπλέον περιορισμούς
http://stavrakoudis.econ.uoi.gr/stavrakoudis/?iid=401.