Проблема с массивом с TXT-файлом

0
    // 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

Теги:
arrays

1 ответ

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

Одна ошибка сразу: вы получаете доступ к элементу массива, который выходит за рамки:

    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()!!
}

Аналогично, если файл не существует, немедленно верните его и не пытайтесь обрабатывать самые высокие и самые низкие значения.

Ещё вопросы

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