getline c++ проблеми с препълване на тръба (?)

Направих проста програма на c++ за четене на файл

#include <string>
#include <iostream>

using namespace std;

int main()
{
    string text;
    getline(cin, text);
    int textlength = 0;
    textlength = text.length(); 
    cout << text << endl;
    cout << text[3] << endl;
    cout << textlength << endl;
    int number=0;
    cout << "Enter a number: " << endl;
    cin >> number;
}

Така че компилирам тази програма в Win 8.1 pro + mingw и всичко е наред. След това го стартирам, като пиша в cmd a.exe < sample.txt. Компилираната програма и txt трябва да са в една и съща папка.

sample.txt е файл с този текст (някои произволни букви, цифри и т.н.):

iuhuefusifsduifhsdiufhfdliuhfdslhfdiufhfdslihfsdui 6 rer4 r4 r4t 4t46 t 4t43t 00 00 002 " & %

Всичко работи добре до точката с последния cin. Не мога да въведа число в този момент, защото процесът на въвеждане е пропуснат. Също така се опитах да прочета текста без функцията getline. Вместо това просто повторих cin процес и записах прогреса един по един в char. Работеше добре до командата cin в самия край. Пропусна го отново.

И идеи как да се реши този проблем?


person user3529708    schedule 13.04.2014    source източник
comment
възможен дубликат на как да възстановя std::cin на клавиатурата след използване тръба?   -  person masoud    schedule 13.04.2014
comment
Забравете да подадете файл от <, ако трябва да използвате cin след това. Опитайте се да предадете името на файла чрез списък с аргументи и да го отворите чрез ifstream.   -  person masoud    schedule 13.04.2014


Отговори (1)


В този момент cin все още чете от вашия файл sample.txt - и не успява да прочете число, защото getline вече е прочел цялото съдържание на файла. Добавянето на втори ред към sample.txt ще ви позволи да прочетете число (но внимавайте, че обработката на грешки може да стане доста трудна, ако въведеното не е число).

person kow    schedule 13.04.2014
comment
Благодаря за вашият отговор. Но въпреки добавянето на нов ред, той все още пропуска командата cin. - person user3529708; 13.04.2014
comment
Не, не пропуска командата: опитва се да прочете int и не успява - можете да проверите дали индикаторите за състояние cin.good() и cin.fail() не са доволни. - person kow; 13.04.2014