C 二维阵列显示矩阵

C 二维阵列显示矩阵,c,C,我是c语言的新手,尝试以矩阵形式显示数组。我看过一些教程,但大多数教程都涉及到在二维数组中应用矩阵概念的for循环。我正在使用while循环并以我的方式检查它。它虽然以矩阵形式显示,但没有显示准确的输出。如果我插入数字1,2..9,则必须以如下形式显示: 1 2 3 4 5 6 7 8 9 但它显示为: 1 2 4 4 5 7 7 8 9 我无法理解为什么会发生这种情况 #include<stdio.h> #include<conio.h> void main()

我是c语言的新手,尝试以矩阵形式显示数组。我看过一些教程,但大多数教程都涉及到在二维数组中应用矩阵概念的for循环。我正在使用while循环并以我的方式检查它。它虽然以矩阵形式显示,但没有显示准确的输出。如果我插入数字1,2..9,则必须以如下形式显示:

1 2 3
4 5 6
7 8 9
但它显示为:

1 2 4
4 5 7
7 8 9
我无法理解为什么会发生这种情况

#include<stdio.h>
#include<conio.h>

void main()
{

    int i=0,j=0;
    int arr[2][2];
    clrscr();
    while(i<=2)
    {
        j=0;
        while(j<=2)
        {
            scanf("%d",&arr[i][j]);
            j++;
        }
        i++;
    }
    i=0;
    while(i<=2)
    {
        j=0;
        while(j<=2)
        {
            printf("%d ",arr[i][j]);

            //printf("%c",k);
            j++;
            //k++;
        }
        printf("\n");
        i++;
    }
    printf("%d",arr[0][2]);
    getch();
#包括
#包括
void main()
{
int i=0,j=0;
int arr[2][2];
clrsc();

而(i您只需以正确的方式声明二维数组即可存储这样的9个元素

int arr[3][3];  //3x3 =9 elements

您被声明为arr[2][2]。这是一个二维数组,存储四个元素2x2=4

看起来,您使用的是类似TurboC++的IDE,但大多数其他IDE,如
代码块
和linux
gcc
g++
编译器不支持
conio.h
头文件及其
clrsc()函数
getch()
,这会降低代码的可移植性

您的数组大小不符合3d矩阵的要求,您得到的模式只是一个巧合,在我的linux平台上,当我试图设置数组大小
arr[2],[2]
时,它给出了这个结果

1
2
4

4
5
1

2
1
134513968

这里出现的问题是由于较小的数组大小,而不是while循环

试试这个,
此代码使用大小
arr[3][3]
初始化数组,这将解决您的问题

#include<stdio.h>

int main()
{

    int i=0,j=0;
    int arr[3][3];
    while(i<=2)
    {
        j=0;
        while(j<=2)
        {
            scanf("%d",&arr[i][j]);
            j++;
        }
        i++;
    }
    i=0;
    while(i<=2)
    {
        j=0;
        while(j<=2)
        {
            printf("%d ",arr[i][j]);

            //printf("%c",k);
            j++;
            //k++;
        }
        printf("\n");
        i++;
    }
    printf("%d",arr[0][2]);
return 0;
}
#包括
int main()
{
int i=0,j=0;
int arr[3][3];

虽然(i)数组索引超出范围。
int-arr[2][2]
仅对
arr[1][1]
不灵活。请记住,在C数组中,索引是从0开始的…(n-1),其中n是声明的维度。将
int-arr[2][2]
更改为
int-arr[3][3]
(并附带说明:修复
void main()
;C标准要求
main()
返回一个
int
)。令人惊讶的是,您没有得到seg错误而不是错误的显示。您的2 x 2数组被视为一个3 x 3数组。这就是您的问题所在。您的数组的格式应为
int arr[3][3]
我不知道您是忘记了还是其他什么…但是函数
main()没有结束括号
如果数组超出边界是问题所在,那么为什么除了第三个arr[0][2]和arr[1][2]之外,输出完全相同地点。@Divyang如果你尝试不同的输入,你会得到不同的输出方式。简单地说,我可以说这是未定义的behavior@Divyang因为考虑在内存中布局2D数组的最可能的方式。如果访问<代码> ARR[i] [j] < /代码>,第二个维度是2,它所命中的内存将是<代码> *(ARR+2 *I+J)。然后<代码> ARR [ 0 ]。[2]
arr[1][0]
在内存中的位置是相同的,因为2*0+2==1*2+0,同样地
arr[1][2]
arr[2][0]
都是别名,因为2*1+2=2*2+0。整个第三行都不在数组的末尾,但它仍然会正常工作。@Divyang如果您声明
int-arr[3][3]
,不仅可以获得足够的内存以避免溢出,而且公式中的乘数变为3,这意味着您在内存中为每一个(有效)变量获得唯一的位置一组索引。我尝试在netbeans中编写c。它执行了c程序一段时间,然后发出错误:无法创建进程:hostinfo不可用这种错误对我来说是新的,我建议重置用户首选项…或者如果您仍然看到一些问题,可以重新安装netbeans,请尝试从命令中使用gcc或g++编译器promptyes我也这么做了…安装了netbeans,然后安装了cygwin软件包,并添加了gcc编译器和所有相应的配置..甚至执行了其中的一些程序..突然它开始显示hostinfo不可用错误..除了再次执行整个过程外,我更喜欢turbo c++ohk..会给它一次尝试,你应该这样做。。。代码块绝对比TurboC++好,TurboC++真的过时了……好吧,如果你认为我在回答中提出了一些好的建议,你可以投票赞成……)