疑问早就产生了,也查询了大量的资料,但是一直没有清晰的完整的结论输出。
今天重新梳理了一下相关的内容,其实很简单,做一个总结。
首先,要清楚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;
}
最后一次更新于2022-11-21
0 条评论