【问题标题】:My array is being filled with random numbers instead of file numbers我的数组填充了随机数而不是文件号
【发布时间】:2021-01-21 21:16:05
【问题描述】:
#include <iostream>
#include <fstream>

using namespace std;

int main(){
        int grades[30];
        int num = 0;
        ifstream inFile;
        inFile.open("grades.dat")
        while(inFile >> grades[num])
        {
                cout << grades[num] << endl;
                num++;
        }
        inFile.close();
return 0;
}

我的代码在数组中给了我随机数,比如 -98312 或 40124,我不知道如何解决它。 Grades.dat 只是一个包含 5 个数字的简单文本文件,我想用它来填充数组,而 Grades.dat 看起来像这样。

100

95

87

90

76

【问题讨论】:

  • 当您使用调试器运行程序时,您看到了什么?这正是调试器的用途。如果您不知道如何使用调试器,这是一个学习如何使用调试器一次运行一行的好机会,监控所有变量及其值的变化,并分析程序的逻辑执行流程。知道如何使用调试器是每个 C++ 开发人员必备的技能,没有例外。在调试器的帮助下,您应该能够快速找到此程序以及您编写的所有未来程序中的所有错误,而无需向任何人寻求帮助。
  • 我们可以看看文件的转储
  • 问题中的代码无法编译。发布可编译的minimal reproducible example

标签: c++ arrays loops file fstream


【解决方案1】:

我想通了。出于某种原因,当我做了 num++;它会抛开一切,并出于某种原因给我随机数。一旦我删除了那行,一切就顺利进行了。

【讨论】:

  • 如果您通过添加缺少的; 来编译问题中的代码,它会正常工作 num++。如果您删除num++,您会将所有值读入grades[0],因此您之后无法打印出数组。您显然没有运行与您在问题中发布的相同代码。
【解决方案2】:

数组最初声明有 30 个点,如果 grades.dat 文件只有 5 个,那么整个 Grades[0]-grades[4] 应该是正确的数字,数组的其余部分可以是随机数,因为你从来没有清空阵列。 尝试修改为 Grades[30] = {0};

【讨论】:

  • OP的代码只输出从文件中成功读取的数字,所以看起来不是初始化问题。
猜你喜欢
  • 2020-02-25
  • 2013-04-18
  • 2017-06-04
  • 2011-01-23
  • 1970-01-01
  • 2020-05-28
  • 2013-09-16
相关资源
最近更新 更多