Как прочитать полную строку от пользователя, используя cin? - PullRequest
17 голосов
/ 28 марта 2011

Вот мой текущий код C ++.Я хотел бы знать, как написать строку кода.Буду ли я все еще использовать cin.getline(y) или что-то другое?Я проверил, но ничего не могу найти.Когда я запускаю его, он работает отлично, за исключением того, что он набирает one word вместо полных строк, которые мне нужны для вывода.Это то, что мне нужно помочь.Я выделил это в коде.

Спасибо за помощь

#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;
    }
}

Ответы [ 3 ]

64 голосов
/ 04 октября 2011

Код cin >> y; читает только одно слово, а не всю строку.Чтобы получить строку, используйте:

string response;
getline(cin, response);

Тогда response будет содержать содержимое всей строки.

9 голосов
/ 28 марта 2011
#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;
}
3 голосов
/ 27 января 2018
string str;
getline(cin, str);
cin >> ws;

Вы можете использовать функцию getline для чтения всей строки вместо чтения слово за словом. И cin >> ws пропускает пробелы. И вы найдете некоторые подробности об этом здесь: http://en.cppreference.com/w/cpp/io/manip/ws

...