繁体   English   中英

从文件C ++读取奇怪的整数

[英]Strange integer reading from file C++

真的试着环顾四周,用过搜索。 使用Google,尝试了很多方法,但我无法弄清楚这一点。 (我想对于那些说流利的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 1 2 1 2 1 2 1 2 1

应该创建一个5x5数组,然后按顺序填充它。
现在...结果是完全不同的。
对于前几个阵列成员,它给出了像2686048,4686232等等。

C / C ++数组为0。 它们的索引从0开始到长度为1。 程序中的第一个错误是此循环的索引。 您应该从[0,szam_helyseg-1]和[0,szam_madar-1]开始

for (int i=1; i <= szam_helyseg; i++)
    {
        for(int j=1; j <= szam_madar; j++)
        {
            f >> matrix[i*szam_madar + j];
        }
    }

此外,由于您尝试表示Matrix,因此如果使用2D数组,则有利于代码的清晰度。 这将摆脱索引算法(如i * szam_madar + j),这也可能是很难找到错误的来源。

你有这样的东西:

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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM