注册 登录
编程论坛 C语言论坛

定义只有9个元素的数组非要输入10个元素才能输出

domore 发布于 2019-08-03 15:38, 2023 次点击
我定义了一个3X3的二维数组,来进行行列互换的操作并输出换好后的数组
用scanf赋值,输入第九个数字后按enter键没反应光标还是一闪一闪,这时狂按enter或空白键没用
继续输入一个数字,结果正常输出了
我定义的明明是有且仅有9个元素的数组,为什么这里非要我输入10个数字才能正常执行呢、、、
望大神解释一下哎   谢谢了!!!
只有本站会员才能查看附件,请 登录

#include<stdio.h>
#define N 3
int a[N][N];        //定义一个3X3的全局数组a
int main()
    {
    void swap(int a[][3]);
    int i,j;
    printf("enter 9 integer numbers to array:\n");        
    for(i=0;i<N;i++)        //输入9个数据
        for(j=0;j<N;j++)
            scanf("%d ",&a[i][j]);        
        printf("the old:\n");
    for(i=0;i<N;i++)        //输出原数组
        {
        for(j=0;j<N;j++)
            printf("%d ",a[i][j]);        
        printf("\n");
        }
    swap(a);        //进行行列互换
    printf("the new:\n");
    for(i=0;i<N;i++)        //输出行列互换后的新数组
        {
        for(j=0;j<N;j++)
            printf("%d ",a[i][j]);
        printf("\n");
        }
    return 0;
    }


void swap(int a[][3])        //定义行列互换函数
    {
    int i,j,t;
    for(i=0;i<N;i++)
        for(j=i+1;j<N;j++)
            {
            t=a[i][j];
            a[i][j]=a[j][i];
            a[j][i]=t;
            }
    }
5 回复
#2
rjsp2019-08-03 18:53
scanf("%d ",&a[i][j]);
中 %d 后面为什么有个空格?
#3
domore2019-08-03 20:02
回复 2楼 rjsp
不然数字会挤到一起啊
不加空格  输出就是
123
456
789

加空格就是
1 2 3
4 5 6
7 8 9
还有就是想输入个位数以上的数时会输不了
如想在中间输入13它会当成两个数字而不是一个数字   
#4
forever742019-08-03 20:52
版主的意思是scanf和printf是不同的,麻烦你看清楚。
#5
wufuzhang2019-08-03 21:31
空格(Space)、回车(Enter)、制表(Tab)这些都属于空白字符(White Space)
scanf("%d ", &a[i][j])中格式符应该理解为整数 + 空白字符,所以你输完9个数后,
再输入回车,scanf并没有结束,而是认为你输入的还是空白字符,直到你再输入一个
字符(不一定是数字),scanf才结束。


可以输入13呀!
只有本站会员才能查看附件,请 登录
#6
wufuzhang2019-08-03 21:34
刚卡了,发重了,版主删除一下,谢谢。
1