分享
为什么问答平台  ›  专栏  ›  技术社区  ›  Amit Hasan Arpon

为什么最后一行和最后一列的行为是这样的? - Why are the last row and last column behaving like this?

  •  -1
  • Amit Hasan Arpon  · 技术社区  · 8 月前

    我是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
    

    为什么最后一列和最后一行的行为是这样的?当我在第8行将整个数组初始化为0时,a[0][9]、[8][9]和[9][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个值没问题,但其他的值,哦,好吧:(

    1 回复  |  直到 8 月前
        1
  •  -1
  •   Siva Pratheep    8 月前
    #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列,所以有一个垃圾值。执行上述程序并获得预期的输出