疑问早就产生了,也查询了大量的资料,但是一直没有清晰的完整的结论输出。
今天重新梳理了一下相关的内容,其实很简单,做一个总结。


首先,要清楚scanf的匹配机制。

  • %c匹配一个字符或一个字符序列。
  • %s匹配非空格字符序列(字符串)
  • %d匹配十进制整数。

常规来说,除了%c外,其它的%格式说明符都会以空格字符作为分割,而且,C语言文档中规定:

any single whitespace character in the format string consumes all available consecutive whitespace characters from the input (determined as if by calling isspace in a loop). Note that there is no difference between "n", , " ""tt", or other whitespace in the format string.

翻译过来就是:任何格式字符串(输入到scanf()的字符串)中的单个空白符处理所有来自输入的可用连续空白符(如同通过于循环中调用 isspace 确定)。注意格式字符串中 "n" 、 " " 、 "tt" 或其他空白无区别。

即制表符、换行符、“0”等都与空格等价,称作空白符,多个空白符看作一个。

所以我们能在C语言中以回车、空格实现连续输入字符串或数字。

实例代码如下:

#include <stdio.h>
int main()
{
    char a[6];
    for(int i=0;i<6;i++)
        scanf("%d",&a[i]);
    for(int i=0;i<6;i++)    
    {
        printf("%d\n",a[i]);    
    }
    return 0;
}