关于c语言scanf函数中格式化输入中加入空格的一个问题

考虑如下一小段程序:

#include<stdio.h>
int main()
{
    int i = 0;
    int num[5];

    for(i = 0;i < 5;i++){
        scanf("%d ",&num[i]);
        printf("num[%d]:%d\n",i,num[i]);
    }

    return 0;
}

当输入序列是:1 2 3 4 5时,还是什么样的情况呢?
这里写图片描述
在我进行测试的时候发现,我已经输入5个数了,但是scanf的读入并没有结束,读入光标也一直在闪动。这就很奇怪了,不是读入五个数字吗?不是应该输入结束了吗?仔细检查代码,我们可以发现,并不是我们在哪要多读入一个数字,那是为什么呢?测试一下!既然它光标还在闪动,那再输入一个数进去看看,
这里写图片描述
我们发现在输入一个数字就好了,而且就是读入我们输入的前5个数字,那就很奇怪了,明明已经读到了可为什么还不结束输入呢?再仔细检查一遍代码,其实问题就出现在一个空格上!!!观察这段代码:

scanf("%d ",&num[i]);

“%d ” 里是一个%d加一个空格,这是程序读入数据时的格式,这个格式是什么意思呢?
这个格式的意思是说是在读完一个整数后,格式中的空格还需要匹配一次有效的输入,就是需要再读一个整数。所以也就造成了输入6个数据只读取了5个。所以把格式中的空格去除即可。

猜你喜欢

转载自blog.csdn.net/miha_singh/article/details/80427633