Работа со строками в C ++ - PullRequest
5 голосов
/ 13 мая 2010

Я работаю со строками в C ++.Недавно я столкнулся с проблемой при вводе строк.Я использую cin >> string;, чтобы получить мою строку в качестве пользовательского ввода.Когда пользователь вводит пробел в строку, следующий ввод автоматически заполняется оставшимися буквами или иногда остается пустым.Поскольку следующая входная строка часто является целым числом, это приведет к неприятной ошибке.Что хорошего решения для этого?

РЕДАКТИРОВАТЬ: Вот текущий код:

cout << "Please print the enemy's name: ";
getline(cin, enemyName);

Ответы [ 4 ]

7 голосов
/ 13 мая 2010

Вы, вероятно, хотите получить весь ввод в строку, пока пользователь не нажмет ввод. В этом случае можно сказать, что вы действительно хотите прочитать «строку» текста. Для этого вы должны использовать std::getline, вот так:

std::getline(cin, enemyName);

Предполагается, что врага определено как std :: string. Если имя врага представляет собой массив символов в стиле c, вам следует использовать cin.getline, например:

cin.getline(enemyName, sizeof(enemyName));

Но попробуйте вообще не использовать массивы символов в стиле C в C ++.

3 голосов
/ 13 мая 2010

Поведение >> со строками является намеренным;он интерпретирует пробельные символы как разделители, на которых стоит остановиться, поэтому он действительно лучше всего разбивает слова на части.std :: getline () (#include ) по умолчанию использует '\ n' в качестве разделителя, но есть также версия std :: getline (), которая принимает собственный символ-разделитель, если он вам нужен.

2 голосов
/ 13 мая 2010

Используйте getline() для чтения всей строки за раз.

getline (cin, string);
2 голосов
/ 13 мая 2010

Используйте getline(cin, string); вместо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...