У меня проблема с C ++, показанная в простой программе ниже:

int main()
{
    string n;
    cin>>n;
    cout<<n;
    return 0;
}

Я пытаюсь сохранить какой-то текст в строке, но когда я пишу более одного слова, он сохраняется только до первого знака пробела.

Вход:

abba abc abd

Выход:

abba

Ожидаемый результат:

abba abc abd

Можно ли решить эту проблему с помощью cin?

0
Halt_07 3 Июл 2021 в 12:49

4 ответа

Лучший ответ

Попробуй это

std::string str;

std::getline( std::cin, str);

getline() - функция-член класса istream, который используется для чтения строки с пробелами.

3
Ted Lyngmo 3 Июл 2021 в 10:02

Оператор извлечения >> остановит преобразование ввода на пробеле.

Вам необходимо использовать функцию std::getline, чтобы прочитать всю строку:

std::getline(std::cin, n)

Будет делать, как вы ожидали-

4
Armin Montigny 3 Июл 2021 в 09:52

Можно ли решить эту проблему с помощью cin?

Нет

Но это возможно с std::getline

2
acraig5075 3 Июл 2021 в 10:01

На этот вопрос есть много доступных решений. Хочу представить 2 из них.

Либо вы можете использовать функцию getline() для чтения пробелов.

#include<iostream>
#include<string.h>

using namespace std;

int main()
{
    char n[100];
    cin.getline(n,100);
    cout<<n;
    return 0;
}

ИЛИ

Вы можете использовать "%[^\n]%*c" для чтения каждого символа до новой строки.

#include<iostream>
#include<string.h>

using namespace std;

int main()
{
    char n[100];
    scanf ("%[^\n]%*c", n);    
    cout<<n;
    return 0;
}
0
Uttam 3 Июл 2021 в 09:57