Почему последний ряд и последний столбец ведут себя так? - PullRequest
0 голосов
/ 18 ноября 2018

Я полный новичок в программировании. Помоги мне, пожалуйста. Я пытаюсь написать программу, которая читает из файла .txt и сохраняет значения в двумерном массиве, а затем печатает массив, чтобы показать, что он получил.

Это то, что содержится в моем .txt файле:

100 200 300
400 500 600

Это программа, которую я написал:

#include <stdio.h>

main(){
//reading file
FILE *fp;
fp=fopen("c:\\users\\user\\desktop\\Arpon 4-1\\Thesis Programming\\Nov18-1.txt", "r");
//creating a 2d array
float a[9][9]={0};
//getting the data into the array
int r,c;
for(r=0; r<=1; r++){
    for(c=0; c<=2; c++){
        fscanf(fp, "%f", &a[r][c]);
    }
}
//printing the array
for(r=0; r<=9; r++){
    for(c=0; c<=9; c++){
        printf("%.0f ", a[r][c]);
    }
    printf("\n");
}
} 

Программа делает то, что я намереваюсь сделать, но вывод получается так:

100 200 300 0 0 0 0 0 0 400
400 500 600 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 1990463982126334400000000000000000
1990463982126334400000000000000000 0 0 0 0 0 0 0 0 0

Почему последний столбец и строка ведут себя так? a [0] [9], a [8] [9] и a [9] [0] должны быть нулями, поскольку я инициализировал весь массив как 0 в строке 8. Но это не так. Это беспокоит меня много. Пожалуйста, помогите!

p.s. Если я напишу float a[9][9]; вместо float a[9][9]={0};, результат будет хуже. Но, как я понимаю, это тоже должно было сработать, потому что любой массив по умолчанию должен начинаться с нуля.

Вывод в этом случае выглядит так:

100 200 300 0 0 0 0 0 0 400
400 500 600 0 0 0 0 -144118967647076350 0 0
0 3508856861431739000000000000000000 2070380395102208 0 0 0 0 -0 0 1921062897128927200000000000000000
1921062897128927200000000000000000 0 0 0 0 0 -0 0 1921062897128927200000000000000000 0
0 0 1921064599296481200000000000000000 -0 0 0 3501549920349857000000000000000000 3486704852883756600000000000000000 -1 0
0 0 0 0 -5529745792027328500 0 0 0 0 1931126885420802600000000000000000
1931126885420802600000000000000000 0 0 1941291301598365100000000000000000 1990334617392229100000000000000000 0 1940873342092601300000000000000000 0 1931097793829879400000000000000000 1931096401147335200000000000000000
1931096401147335200000000000000000 -0 0 0 0 0 0 0 0 1934835908521006500000000000000000
1934835908521006500000000000000000 -406541672906752 -1 1931096401147335200000000000000000 1931134003576028500000000000000000 0 0 0 0 1990463982126334400000000000000000
1990463982126334400000000000000000 0 0 0 0 0 0 0 0 0

Первые 6 значений в порядке, но остальные вещи, да ладно :(

1 Ответ

0 голосов
/ 18 ноября 2018
#include <stdio.h>

main(){
//reading file
FILE *fp;
fp=fopen("c:\\users\\user\\desktop\\Arpon 4-1\\Thesis Programming\\Nov18-1.txt","r");
//creating a 2d array
float a[9][9]={0};
//getting the data into the array
int r,c;
for(r=0; r<=1; r++){
for(c=0; c<=2; c++){
    fscanf(fp, "%f", &a[r][c]);
}
}
//printing the array
for(r=0; r<9; r++){
for(c=0; c<9; c++){
    printf("%.0f ", a[r][c]);
}
printf("\n");
}
}

Проблема заключается в печати массива.Вы объявили a[9][9], но пытаетесь напечатать 10-ю строку и столбец, поэтому существует нежелательное значение.Выполните вышеуказанную программу и получите ожидаемый результат

...