C ++ делает, пока цикл продолжает идти после EOF

0

У меня вопрос о вводе-выводе файлов.

Это мой код:

#include <iostream>
#include <fstream>
#include <string>

int main(int argc, char** argv) 
{
    using namespace std;
    string InputFileName="", temp=""; //File Name entered on command line

    int Factor1=0, Factor2=0, MaxNum=0;
    if (argc < 2)
    {
        cout << "No File Name Specified\n";
        return 0;
    }
    else
    {
        //InputFileName = argv[1]; //Get File Name from command line arguments array
        ifstream inf (argv[1]); //open file for reading

        if(!inf) //check for errors opening file, print message and exit program with error
        {

            cerr << " Error opening input file\n"; 
            return 1;
        }


        do
        {
            inf >> Factor1;
            inf >> Factor2;
            inf >> MaxNum;
            cout << "Factor 1: " << Factor1 << " Factor 2: " << Factor2 << " Maximum Number: " << MaxNum << "\n";
        }while(inf);

    }
    return 0;
}

входной файл содержит:

3 5 10
2 7 15

выход:

Factor 1: 3 Factor 2: 5 Maximum Number: 10
Factor 1: 2 Factor 2: 7 Maximum Number: 15
Factor 1: 2 Factor 2: 7 Maximum Number: 15

Это не домашнее задание. Прошло 20 лет с тех пор, как я взял класс C++. Я пытаюсь освежить C++. Я провел большую часть своей работы в Visual Basic. Мой вопрос в том, почему цикл while не поймает EOF и не выйдет, прежде чем он выведет 3-ю строку и как ее исправить, или я об этом ошибаюсь.

  • 2
    Ваш отступ очень вводит в заблуждение.
  • 0
    отступ - это результат копирования его в редактор stackoverflow, прошу прощения.
Показать ещё 4 комментария
Теги:

1 ответ

3
Лучший ответ

Вы не можете предсказать, удастся ли I/O. Вы должны проверить возвращаемое значение:

while (inf >> Factor1 >> Factor2 >> MaxNum)   // checks the value of "inf", i.e.
{                                             // whether the input succeeded
    cout << "Factor 1: " << Factor1
         << " Factor 2: " << Factor2
         << " Maximum Number: " << MaxNum << "\n";
}

Ваш исходный код безрассудно предполагает, что вход удался без проверки, продолжал потреблять входные данные, и только намного позже вернулся, чтобы спросить: "О, кстати, был ли кто-то из этого действительно законным?"

Ещё вопросы

Сообщество Overcoder
Наверх
Меню