// Declareing variables
const int ARRAY_SIZE = 12; // Array size
int numbers[ARRAY_SIZE]; // Array with 12 elements
int highest, lowest, total = 0, count = 0;
double average;
ifstream fs;
/***** Processing Section *****/
fs.open ("numbers.txt");
if (fs.is_open())
{
cout << "Successfully opened numbers.txt\n";
fs.close();
}
else
{
cout << "Error opening file";
}
while (count < ARRAY_SIZE && fs >> numbers[count])
{count++;
highest = numbers[ARRAY_SIZE];
for (count = 1; count < ARRAY_SIZE; count++)
{
if (numbers[count] > highest)
highest = numbers [count];
}
lowest = numbers[ARRAY_SIZE];
for (count = 1; count < ARRAY_SIZE; count++)
{
if (numbers[count] < lowest)
lowest = numbers [count];
}
for (int count = 0; count < ARRAY_SIZE; count++)
total += numbers[ARRAY_SIZE];
for (int count=0; count < ARRAY_SIZE; count++)
total += numbers[ARRAY_SIZE];
average = total / ARRAY_SIZE;
}
Этот код использует файл number.txt с цифрами: 47 89 65 36 12 25 17 8 62 10 87 62
Моя программа выводит неверные результаты:
Успешно открыт number.txt
Самое высокое значение - 0
Самое низкое значение - 3
Сумма чисел равна 0
Среднее значение - 2.09204e-317
Одна ошибка сразу: вы получаете доступ к элементу массива, который выходит за рамки:
highest = numbers[ARRAY_SIZE];
Массивы индексируются начиная с 0, поэтому самым высоким показателем является ARRAY_SIZE - 1
. Вы делаете ту же самую ошибку с lowest
.
Самое простое решение - сделать это:
highest = numbers[0];
//...
lowest = numbers[0];
Вторая ошибка заключается в том, что вы сначала не читали все свои номера в массиве. Поскольку эта программа хочет, чтобы вы использовали массивы, скорее всего, вы должны прочитать все числа в массиве, и после того, как вы прочитали, вы зацикливаете на самую высокую и самую низкую.
while (count < ARRAY_SIZE && fs >> numbers[count])
count++;
// after this, loop for computing the highest and lowest
Третья ошибка заключается в том, что вы закрыли файл после подтверждения того, что он существует. Вы должны оставить файл открытым.
if (fs.is_open())
{
cout << "Successfully opened numbers.txt\n";
// do not call fs.close()!!
}
Аналогично, если файл не существует, немедленно верните его и не пытайтесь обрабатывать самые высокие и самые низкие значения.