2017-01-30 2 views
0

Я пытаюсь прочитать файл с помощью функции getline() и , используя мой входной файл, используя команду bash, но получаю нелогичный вывод.Входной файл трубопровода из bash и прочитайте его по строке с помощью getline (cin, line)

Это мой main.cpp код:

#include <iostream> 
#include <sstream> 
#include <string> 

using namespace std; 
int main(int argc, const char * argv[]) { 

    string line; 

    while(getline(cin,line)){ 
     cout<<line<<endl; 
    } 
    return 0; 
} 

Мой входной файл с именем input.txt выглядеть следующим образом

4 MF MF FM FF MF MM 
MM FF 
MF MF MF MF FF 

моя команда Баш и работает результат

DENGs-MacBook-Pro:APS stevedeng$ g++ -o main main.cpp -std=c++11 
DENGs-MacBook-Pro:APS stevedeng$ ./main < input.txt 
MF MF MF MF FFMF MM 

Что Я думал, что программа будет читать input.txt по строкам и печатать вывод точно так же, как формат, как входной файл ,

Может кто-нибудь объяснить, что здесь происходит, только с одной линией проводного вида вывода?

Как я могу достичь результата чтения строки, если единственный способ, которым я могу это сделать, - это , который связывает входной файл с bash вместо использования ifstream? Любая помощь будет оценена.

+0

Работает должным образом для меня. –

+2

Какова ваша платформа и компилятор C++. Похоже, что у вас есть проблемы с возвратом строки и возвратом каретки. –

+0

Привет Я использую Mac и его TextEdit, когда я меняю содержимое входного файла, некоторое время он печатает несколько строк, но не все, и иногда он печатает самую длинную строку, и я не знаю почему. –

ответ

1

Кажется, что ваш терминал не получает или игнорирует линию, так что каждая новая строка перезаписывает ранее написанную.

Единственное, что может быть в том, что входной файл содержит только возврат каретки, но теперь линия фида, и по какой-то причине getline не исправит это. Если это проблема, обратитесь к следующему ответу: SO (пожалуйста, не забудьте обновить, если это полезно).

Другое дело, что канал не записывается в cout. Я бы предложил - по крайней мере, для диагностической цели - попробовать printf("%s\r\n",line.c_str()).

+0

Это дает мне тот же результат, но после того, как я положил несколько пустых строк между строками и удалил их обратно, кажется, что они исправлены, но я не знаю, будет ли это повторится. Оцените. Можете ли вы объяснить, что произошло? –

+0

Я предполагаю, что вы скопировали файл, созданный с версией (старше?) Os. Когда вы сейчас редактируете, каретка возвращается, и фиды строк могут быть вставлены правильно. –

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