Я пытаюсь прочитать все целые числа из файла (может быть до 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 должно быть в последнем месте)
Спасибо за любую помощь!
Что вы делаете в своем коде (извините псевдо-псевдокод):
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).
myfile >> bubble[i];
, Или просто поменяйте местами 2 строки внутри тела if
.