2014-10-02 2 views
-1

Я пытаюсь взять ввод из файла, который состоит из целых чисел Т и Т после него.cin.ignore (INT_MAX) очищает все

#include<iostream> 
#include<string> 
#include<vector> 
#include<iterator> 
#include<sstream> 
#include<algorithm> 
#include<limits.h> 
#include<stdlib.h> 
#include<stdio.h> 

using namespace std; 

int main() { 
    int T; 
    cin >> T; 
    int m = 0; 
    cin.ignore(INT_MAX); 
    while(m < T) { 
     string sentence; 
     getline(cin,sentence,'\n'); 
     cout << "Case #" << m << ": " << sentence << endl; 

     m++; 
    } 
} 

При вводе 5 строк я получаю следующий вывод.

Case #0: 
Case #1: 
Case #2: 
Case #3: 
Case #4:  

Это файл данных

5 
this is a test 
foobar 
all your base 
class 
pony along 
+3

Можете ли вы опубликовать пример такого файла? В любом случае игнорирование INT_MAX отбрасывает количество символов из стандартного ввода, я считаю, что это не то, что вы хотите –

+0

@MarcoA. Я добавил содержимое файла. – user3747190

ответ

1

Что вы ожидаете произойдет?

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

cin.ignore(INT_MAX); 

Затем вы пытаетесь прочитать из потока снова:

getline(cin,sentence,'\n'); 

Это не удается, потому что оно находится в EOF, но вы не проверяете, успешно ли операция чтения.

Затем после каждого неудачного чтения вы печатали пустую строку, которая не была изменена, потому что чтение не удалось:

cout << "Case #" << m << ": " << sentence << endl; 

Затем повторите попытку прочитать строку еще несколько раз.

Вместо того, чтобы просто просить StackOverflow исправить вашу программу, почему бы вам не попробовать изменить ее, чтобы узнать, что не так?

например.

if (getline(cin,sentence,'\n')) 
    cout << "Case #" << m << ": " << sentence << endl; 
else 
    throw std::runtime_error("getline failed"); 

Учится изолировать проблему в коде и определить, где он ведет себя плохо это важный навык, который вы никогда не узнаете, написав целую программу, то обращаясь к StackOverflow, когда он не работает.

+0

Спасибо за предложение. – user3747190

Смежные вопросы