2015-10-16 2 views
0

Должно быть, я устал, но я не могу понять, почему моя программа не будет читать мои значения cin для init и end, которая должна быть началом и конечной точкой для моя программа. То, как его установка для ввода является первой строкой, - это количество случаев, тогда будет новая строка, которая будет строкой, а затем на следующей строке будут два целых числа, разделенных пробелом, поэтому я чувствую, как я его построил правильно, но когда я отлаживаю код, значения для init и end никогда не изменятся, инициализирую ли я переменную или нет.Cin не читает мои входы

int case_count; 
string name; 
int init = 0; 
int end = 0; 

cin >> case_count; 
cin.ignore(numeric_limits<::streamsize>::max(),'\n'); 
for (int i = 0; i < case_count; ++i) { 
    cout << "Case " << i << "\n"; 
    getline(cin, name); 
    cin.ignore(numeric_limits<::streamsize>::max(), '\n'); 

    cin >> init; 
    cin >> end; 

Пример ввода

 
3 
flap 
1 3 
swoop 
0 9 
flip 
0 6

Его делает его трудно продолжать с остальной частью кода.

+0

Игнорировать вызов 'ignore()'. Пун предназначался. – CinCout

ответ

2

Проблема в том, что вы звоните ignore в цикле. Проблема заключается в том, что std::getline извлекает (и отбрасывает) символ новой строки, что означает, что ваш вызов ignore в цикле будет читать и отбрасывать строку следующей линии (номер с двумя номерами).

Кроме того, при использовании оператора ввода для чтения чисел или строк, оператор пропустить ведущие пробельные, так что даже если getline не читал перевод строки, он бы до сих пор работал без ignore вызова.

Однако, после чтения номеров есть новая строка во входном потоке, а следующая итерация вызовет std::getline вызов этой новой строки, а затем name будет пустым, так что вы должны, как было предложено ММ в комментарий, переместите звонок ignore на номер последним в цикле.

+1

«ignore» может быть перемещен до конца 'cin >> end', если этот код находится в цикле. В противном случае следующая итерация цикла завершится неудачно. Хотя было бы более надежно использовать getline для всех строк и sstream или иначе для синтаксического анализа. –

+0

@ M.M А, это правда. Спасибо что подметил это. :) –