簡體   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