真的试图四处看看,用过搜索。使用过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 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/

10-09 06:37