2014-04-13 2 views
0

Я сделал простую программу на C++ для считывания файлаGetLine 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 " & % 

Все отлично работает до точки с последней КИН. Я не могу ввести число в этот момент, потому что процесс ввода пропускается. Я также попытался прочитать текст без функции getline. Вместо этого я просто повторил процесс cin и сохранил прогресс один за другим в char. Работала хорошо, пока команда cin не была в самом конце. Он пропустил это еще раз.

И идеи, как решить эту проблему?

+0

Возможный дубликат [как восстановить std :: cin на клавиатуру после использования трубки?] (Http://stackoverflow.com/questions/12164448/how-to-restore-stdcin-to-keyboard-after-using- pipe) – deepmax

+1

Забудьте процитировать файл '' ', если вам нужно использовать' cin' после этого. Попробуйте передать имя файла по списку аргументов и откройте его 'ifstream'. – deepmax

ответ

0

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

+0

Спасибо за ваш ответ. Однако, несмотря на добавление новой строки, она по-прежнему пропускает команду cin. – user3529708

+0

Нет, он не пропускает команду: он пытается прочитать int и не удается - вы можете проверить, что индикаторы состояния cin.good() и cin.fail() «недовольны». – kow

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