Странное целочисленное чтение из файла C ++ - PullRequest
0 голосов
/ 13 декабря 2010

Действительно пытался осмотреться, использовал поиск.Использовал Google, перепробовал много способов, но я не могу понять это.(И я думаю, что это действительно легко для любого, кто «свободно говорит на C ++».)

Это действительно легкое домашнее задание, но я понятия не имею, почему это работает так.1004 *

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 и т. д.

Ответы [ 2 ]

1 голос
/ 13 декабря 2010

у вас есть такие вещи, как:

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 или (лучше) a vector<int>.

1 голос
/ 13 декабря 2010

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];
        }
    }

Кроме того, поскольку вы пытаетесь представить матрицу, было бы полезно для ясности кода, еслииспользовать 2D-массив.Это избавит от арифметики индекса (например, i * szam_madar + j), которая также может быть источником труднодоступных ошибок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...