为什么最后一行和最后一列的行为是这样的?

时间:2018-11-18 11:23:08

标签: c arrays file scanf

我是c编程的完整入门者。请帮帮我。我正在尝试编写一个程序,该程序从.txt文件读取并将值存储在2D数组中,然后再打印该数组以显示其结果。

这是我的.txt文件中包含的内容:

9:30, 10:00, 10:30, 11:00, 11:30, 12:00, 14:30, 15:00, 15:30, 16:00, 16:30, 17:00, 17:30, 18:00, 18:30, 19:00, 19:30, 20:00, 20:30, 21:00

这是我编写的程序:

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");
}
} 

为什么最后一列和每一行的行为都这样?当我在第8行中将整个数组初始化为0时,a [0] [9],a [8] [9]和a [9] [0]应该全部为零,但事实并非如此。这让我烦恼很多。请帮忙!

p.s。如果我写的是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 而不是float a[9][9];,那么输出会更糟。但这据我所知也应该起作用,因为默认情况下任何数组都应以0s初始化。

在这种情况下的输出如下:

float a[9][9]={0};

前6个值还可以,但是其他东西,哦:(

1 个答案:

答案 0 :(得分:-1)

#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行和10列,因此存在一个垃圾值。执行上面的程序并获得预期的输出