真的试着环顾四周,使用搜索。使用谷歌,尝试了很多方法,但我无法弄清楚。 (而且我想对于任何“能说流利的 C++”的人来说,这真的很容易。)
这是一个非常简单的作业,但我不知道为什么会这样。
这是代码:
int temp;
string fname;
cout << "Kerem a fajlnevet: ";
cin >> fname;`
ifstream f;
f.open(fname.c_str());
int szam_madar, szam_helyseg;
f >> szam_madar;
f >> szam_helyseg;
int matrix[szam_helyseg * szam_madar];
for (int i = 1; i <= szam_helyseg; i++)
{
for(int j=1; j <= szam_madar; j++)
{
f >> matrix[i*szam_madar + j];
}
}
maximalisHelyseg(matrix,szam_helyseg,szam_madar);`
以及我在阅读时使用的文本:
5 5 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1
它应该创建一个 5x5 数组,然后按顺序填充它。
现在……结果大不一样了。
对于前几个数组成员,它给出类似 2686048、4686232 等的内容。
最佳答案
你有这样的东西:
for (int i=1; i <= szam_helyseg; i++)
{
for(int j=1; j <= szam_madar; j++)
{
f >> matrix[i*szam_madar + j];
}
}
但是数组索引从 0 开始计数,所以最简单的方法是
for (int i=0; i < szam_helyseg; i++)
{
for(int j=0; j < szam_madar; j++)
{
f >> matrix[i*szam_madar + j];
}
}
等您可以看到,在初始迭代中,计算的索引为 0,而在原始迭代中,它从 szam_madar + 1
开始。 (这是出现问题的迹象)。
另外,可变长度数组不是标准的 C++(引用 int matrix[szam_helyseg * szam_madar];
行)。使用数组 new
运算符,或(更好)一个 vector<int>
.
关于c++ - 从文件 C++ 读取奇怪的整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4431332/