printf在C语言中根据输入输出多维数组中意外的最后一个元素



我正在学习在C中使用多维数组,我无法理解为什么printf()有时会在下面的程序中给出意想不到的结果。

这个程序的想法是,我希望初始化一个5x2数组,并接受来自用户的5个整数,用scanf填充第二个索引,然后打印数组:

#include <stdio.h>
#include <conio.h>
int main(void)
{
    int i=0, mat[5][2] = {
        {0, 0},
        {0, 0},
        {0, 0},
        {0, 0},
        {0, 0}
    };
    printf("Please enter 5 integers then press enter: n");
    do {
        scanf("%i", &mat[i][2]);
        i++; 
       } while (getchar() != 'n');

    printf("Here's what the 5x2 array looks like: n");
    for(i = 0; i < 5; i++){
        printf("%i %i", mat[i][1], mat[i][2]);
        printf(" n");
    }
    return 0;   
}

如果我作为用户输入某些整数,则输出如预期:

C:Usershackr>tmp.exe
Please enter 5 integers then press enter:
0 1 2 3 4
Here's what the 5x2 array looks like:
0 0
0 1
0 2
0 3
0 4

但是,如果我输入不同的整数,那么最后一行的输出就不是我所期望的:

C:Usershackr>tmp.exe
Please enter 5 integers then press enter:
1 2 3 4 5
Here's what the 5x2 array looks like:
0 1
0 2
0 3
0 4
0 4
C:Usershackr>tmp.exe
Please enter 5 integers then press enter:
9 8 7 6 5
Here's what the 5x2 array looks like:
0 9
0 8
0 7
0 6
0 4

实际上,正如你在上面看到的,看起来索引2的最后一个元素是任意的"4"。

也许这是由于我对数组值如何索引或引用的误解?

数组总是从索引0开始

您可以尝试下面的代码片段:

#include <stdio.h>
#include <conio.h>
int main(void)
{
    int i=0, mat[5][2] = {
        {0, 0},
        {0, 0},
        {0, 0},
        {0, 0},
        {0, 0}
    };
    printf("Please enter 5 integers then press enter: n");
    do {
        scanf("%i", &mat[i][1]);
        i++; 
       } while (getchar() != 'n');

    printf("Here's what the 5x2 array looks like: n");
    for(i = 0; i < 5; i++){
        printf("%i %i", mat[i][0], mat[i][1]);
        printf(" n");
    }
    return 0;   
}

while声明你可以使用mat[5][2],但是访问你应该使用

mat[0][0] mat[0][1]
mat[1][0] mat[1][1]
...
..
mat[4][0] mat[4][1]

我想现在应该可以了

mat定义为:

int mat[5][2];

当您试图访问

中超出边界的元素时,x在0 ~ 4范围内和y在0 ~ 1范围内的有效元素是mat[x][y]
scanf("%i", &mat[i][2]);

printf("%i %i", mat[i][1], mat[i][2]);

相关内容

  • 没有找到相关文章

最新更新