неожиданное поведение getline - PullRequest
0 голосов
/ 10 апреля 2020

Первоначально пытался прочитать данные, используя char *, но переключился на строковую причину, получая поведение, как если бы отсутствовал нулевой терминатор. сделал проблему минимальной ниже, но все еще получаю очень странный вывод

int main(int argc, char * argv[]){


    // file one:  flightData
    std::ifstream inFile1(argv[1]);
    if (!inFile1.is_open())
    {
        std::cout << "Could not open the file 1." << std::endl;
        return -1;
    }
    // file two: flightPlans
    std::ifstream inFile2(argv[2]);
    if (!inFile2.is_open())
    {
        std::cout << "Could not open the file 2." << std::endl;
        return -1;
    }
    //File three: output
    std::ofstream outputfile(argv[3]);
    if (!outputfile.is_open())
    {
        std::cout << "Could not open the output file" << std::endl;
        return -1;
    }
    std::string buffer;


    getline(inFile1, buffer);
    std::cout<<buffer<<std::endl;
    while (getline(inFile1, buffer)) {
        std::cout<<buffer;
        std::cout<<"help";
    }

   // flightPlanner system(inFile1);
  //  system.printF();
//    system.planFlights(inFile2,outputfile);

    return 0;
}

вывод равен

4
helpDallas|Austin|50|50help

, что я почти уверен, что это неправильно, интересно, когда я добавляю endl в буфер cout, это дает мне вывод, я бы ожидал не совсем уверен, что происходит

inFile1

4
Dallas|Austin|50|50
Dallas|Austin|50|50
Dallas|Austin|50|50
Dallas|Austin|50|50

Когда я запускаю в отладчике, я получаю вывод я ожидаю:

4

Dallas|Houston|50|50
helpDallas|Houston|50|50
helpDallas|Houston|50|50
helpDallas|Houston|50|50help

любая идея что может происходить?

1 Ответ

0 голосов
/ 11 апреля 2020

Вам нужно очистить свой стандартный вывод?

std::cout << std::flush;

Есть ли шанс, что ваша оболочка съела ваши результаты? Попробуйте передать вывод в "cat -A":

./a.out | cat -A

(Диск по комментарию - возможно, я не знаю, о чем я говорю ^ _ ^)

...