Почему это печатается дважды?

0

Я не могу понять, почему выход идет дважды.

    int lines = 3
    myReadFile.open("graph.txt");
    if (myReadFile.is_open()) {

        //Read in each value one at a time
        while (!myReadFile.eof()) {
            for(int i = 0; i < lines; i++) {
                for(int j = 0; j<lines; j++) {
                    myReadFile >> output;
                    output2 = atoi(output);
                    Graph[i][j] = output2;
                    cout << "Graph[" << i <<"][" << j <<"] = " << output2 << endl;
                }
            //cout << output << output2 << endl; 
            }
        }

    } else {
        cout << "graph.txt does not exist." << endl; 
    }
    myReadFile.close();

выход ниже:

Graph[0][0] = 0
Graph[0][1] = 65
Graph[0][2] = 4
Graph[1][0] = 7
Graph[1][1] = 0
Graph[1][2] = 68
Graph[2][0] = 67
Graph[2][1] = 84
Graph[2][2] = 0
Graph[0][0] = 0
Graph[0][1] = 0
Graph[0][2] = 0
Graph[1][0] = 0
Graph[1][1] = 0
Graph[1][2] = 0
Graph[2][0] = 0
Graph[2][1] = 0
Graph[2][2] = 0

Он делает то, в чем я нуждаюсь, но он возвращается, но и возвращает нули. Любая помощь будет замечательной! Благодарю!

  • 5
    while (!eof()) не так. Примите во внимание тот факт, что вы используете ввод перед проверкой, если он действителен.
  • 0
    О чем ты говоришь? редактировать: я нажал на ссылку. Глядя на это сейчас
Показать ещё 3 комментария
Теги:
for-loop
cout

1 ответ

0

efo() возвращает флагом состояния eofbit stream, который будет установлен только тогда, когда вы читаете конец файла. Это происходит во время второй итерации цикла while, где вы пытаетесь прочитать содержимое файла в 'output'.

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

Ещё вопросы

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