Το πρόβλημα του κενού χαρακτήρα στη 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 License
Εκπαιδευτικό υλικό από τον Αθανάσιο Σταυρακούδη σας παρέχετε κάτω από την άδεια Creative Commons Attribution-NonCommercial-ShareAlike 4.0 License.
Σας παρακαλώ να ενημερωθείτε για κάποιους επιπλέον περιορισμούς
http://stavrakoudis.econ.uoi.gr/stavrakoudis/?iid=401.