c ++ .eof. Последнее значение файла не прочитано

0

Я пытаюсь прочитать все целые числа из файла (может быть до 100 ints) в массив и распечатать введенные числа и количество введенных чисел. У меня проблемы с ".eof". Независимо от того, что я пытаюсь, последнее значение во входном файле не читается. Может кто-нибудь, пожалуйста, скажите мне, в чем проблема? Вот код.

#include <iostream>
#include <fstream>
#include <iomanip>
#include <string>
using namespace std;
int main()
    {

    int bubble[100];
    int s = 0;
    int count = 0;
    string fileName;

    //int i = 0;

    for(int i = 0; i < 100; i++) bubble[i] = 0;

    cout << "Enter the name of a file of integers to be sorted " << endl;
    cin >> fileName;


   ifstream myfile (fileName);
    myfile >> s;
    //bubble[0] = s;



    while (! myfile.eof() )  //while the end of file is not reached
    {

        //myfile >> s;
        for(int i = 0; i < 100; i++)
        {
            //myfile >> s;
            if(! myfile.eof())
            {
                bubble[i] = s;
                myfile >> s;
            }
            else
            {
                bubble[i] = -1;
            } 
        } 



        //i++;
    }

    myfile.close();


    for(int i = 0; i < 100; i++)
    {
        if(bubble[i] != -1)
        {
            count ++;
        }
    }

   // cout << count;

    for(int i = 0; i < count; i++)
    {
        if(bubble[i] != -1)
    {


        if((i % 10 == 9) || (i== count-1))
        {
            cout << setw(4) << bubble[i] << endl;
        }
        else
        {
            cout << setw(4) << bubble[i] << " ";
        }

        //count ++;
    }

    }

    cout << "\n\nNumber of values in the input file: " << count << endl;

return 0;
}

вход: 100 94 59 83 7 11 92 76 37 89 74 59 65 79 49 89 89 75 64 82 15 74 82 68 92 61 33 95 91 82 89 64 43 93 86 65 72 40 42 90 81 62 90 89 35 81 48 33 94 81 76 86 67 70 100 80 83 78 96 58

output: Введите имя файла целых чисел для сортировки bubble_input.txt 100 94 59 83 7 11 92 76 37 89 74 59 65 79 49 89 89 75 64 82 15 74 82 68 92 61 33 95 91 82 89 64 43 93 86 65 72 40 42 90 81 62 90 89 35 81 48 33 94 81 76 86 67 70 100 80 83 78 96

Количество значений во входном файле: 59

(должно быть 60, а 58 должно быть в последнем месте)

Спасибо за любую помощь!

Теги:
arrays
eof

1 ответ

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

Что вы делаете в своем коде (извините псевдо-псевдокод):

save value of 's' in 'bubble[i]'
read in an integer, saving it in the variable 's',
repeat as long as we have something on the input

Таким образом, когда вы достигнете конца файла, последняя переменная все еще сохраняется только в s, вы не копируете ее в bubble[i]. Просто сохраните его в массиве сразу, чтобы решить вашу проблему.

Изменить - что я также заметил - цикл while не работает, как if. Если файл имеет более 100 целых чисел, вы будете перезаписывать первые 100 с последующими числами (и, возможно, -1s).

  • 0
    Как бы я сделал все это сразу. Это продолжает давать мне ошибки, когда я пытаюсь это
  • 0
    Что-то в строках myfile >> bubble[i]; , Или просто поменяйте местами 2 строки внутри тела if .

Ещё вопросы

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