【问题标题】:Why are the last row and last column behaving like this?为什么最后一行和最后一列的行为是这样的?
【发布时间】:2018-11-18 11:23:08
【问题描述】:

我是 C 编程的完全初学者。请帮帮我。我正在尝试编写一个程序,该程序从 .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] 应该都为零,因为我在第 8 行将整个数组初始化为 0。但它们不是。这让我很烦。请帮忙!

附言如果我写 float a[9][9]; 而不是 float a[9][9]={0}; ,输出会更糟。但据我了解,这也应该有效,因为默认情况下,任何数组都应该以 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 个值还可以,但是其他的,哦,好吧:(

【问题讨论】:

  • 您似乎记得数组索引是从零开始的,但忘记了这意味着最大索引是减一的大小。您尝试访问由九个元素组成的数组中的第 第十个 元素。
  • 所以如果我想要一个 10x10 的数组,我应该写 float a[10][10]={0}; ?
  • 是的,没错。

标签: c arrays file scanf


【解决方案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 列,因此存在垃圾值。执行上面的程序,得到你预期的输出

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-30
    • 1970-01-01
    • 1970-01-01
    • 2014-07-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多