2012-08-06 4 views
0

У меня есть, например, следующий фрагмент кода:строка ввода скопированный текст

string str; 
int i; 
cout<<"input:"; 
cin>>str; 
cout<<"integer:"; 
cin>>i; 

Там на самом деле ничего плохого в этом коде, но если я вставить текст в командной строке в «вход», он автоматически заполняет часть скопированного текста в «integer». Как я могу это решить?

Редактировать: Я могу печатать тексты столько, сколько захочу, но когда я копирую тексты, это происходит неправильно. Я не знаю почему.

+0

Включен ли в ваш текст текст? – ereOn

+0

Не могли бы вы дать образец того, что вы «вставляете» в подсказку? Измените свой вопрос с помощью сеанса правильного и неправильного ввода. –

+0

@ ereOn: да, это – Badshah

ответ

3

Я думаю, ваш текст содержит пробелы. Итак, std::cin здесь не работает. Вместо этого используйте std::getline.

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

Там еще третий параметр std::getline - разделитель. По умолчанию это новый символ строки.


Если ваш текст содержит новые строковые символы, это не сработает. У вас есть 2 варианта:

  • найти уникальный символ, который может быть использован в качестве разделителя и передать его в качестве третьего параметра std::getline
  • чтения построчно (с помощью std::getline) из пользовательского ввода (std::cin) и искать некоторые специальные строки, которые будут сообщать вашей программе, где текст заканчивается. Нет другого способа узнать, где начинается запуск eger int (если только текст не имеет фиксированного размера, но я сомневаюсь, что)
+0

Я действительно пробовал это уже, но все та же проблема – Badshah

+0

@Badshah - Тогда у вас есть новые строки внутри вашего текста. См. Мое редактирование. –

0
string str; 
int i; 
cout<<"input:"; 
getline(cin, str); 
// you want to read the whole line, operator>> will read until whitespace 
cout<<"integer:"; 
cin>>i; 
Смежные вопросы