使用.txt文件的数组出现问题

时间:2014-12-07 05:17:46

标签: c++ arrays

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

我的程序一直输出错误的结果,如:

成功打开numbers.txt

最高值为0

最低值为3

数字之和为0

数字的平均值是2.09204e-317

1 个答案:

答案 0 :(得分: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()!!
}

同样,如果文件不存在,请立即返回,不要尝试处理最高和最低值。