web-dev-qa-db-fra.com

Comment lire une ligne complète de l'utilisateur en utilisant cin?

Voici mon code C++ actuel. Je voudrais savoir comment écrire une ligne de code. Est-ce que j'utiliserais toujours cin.getline(y) ou quelque chose de différent? J'ai vérifié, mais je ne trouve rien. Lorsque je l'exécute, cela fonctionne parfaitement, sauf qu'il ne tape que n Word au lieu des lignes complètes dont j'ai besoin pour la sortie. C'est pour ça que j'ai besoin d'aide. Je l'ai décrit dans le code.

Merci pour ton aide

#include <iostream>
#include <cstdlib>
#include <cstring>
#include <fstream>

using namespace std;

int main()
{
    char x;

    cout << "Would you like to write to a file?" << endl;
    cin >> x;
    if (x == 'y' || x == 'Y')
    {
        char y[3000];
        cout << "What would you like to write." << endl;
        cin >> y;
        ofstream file;
        file.open("Characters.txt");
        file << strlen(y) << " Characters." << endl;
        file << endl;
        file << y; // <-- HERE How do i write the full line instead of one Word

        file.close();


        cout << "Done. \a" << endl;
    }
    else
    {
        cout << "K, Bye." << endl;
    }
}
20
FuzionSki

Le code cin >> y; ne lit que dans un seul mot, pas sur toute la ligne. Pour obtenir une ligne, utilisez:

string response;
getline(cin, response);

response contiendra alors le contenu de la ligne entière.

65
ybakos
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <fstream>
#include <string>

int main()
{
    char write_to_file;
    std::cout << "Would you like to write to a file?" << std::endl;
    std::cin >> write_to_file;
    std::cin >> std::ws;
    if (write_to_file == 'y' || write_to_file == 'Y')
    {
        std::string str;
        std::cout << "What would you like to write." << std::endl;

        std::getline(std::cin, str);
        std::ofstream file;
        file.open("Characters.txt");
        file << str.size() << " Characters." << std::endl;
        file << std::endl;
        file << str;

        file.close();

        std::cout << "Done. \a" << std::endl;
    }
    else
        std::cout << "K, Bye." << std::endl;
}
9
hidayat
string str;
getline(cin, str);
cin >> ws;

Vous pouvez utiliser la fonction getline pour lire la ligne entière au lieu de lire Word par Word. Et le cin >> ws est là pour ignorer les espaces blancs. Et vous trouverez des détails à ce sujet ici: http://en.cppreference.com/w/cpp/io/manip/ws

3
Yini Guo