C 中scanf函数的格式说明符中%c规范之前的空格
如果我在以下程序中的scanf函数的格式字符串中不包含%d和%c规范之间的空格,并在运行时将输入设置为“4 h”,则输出为“Integer = 4且Character = 。
在这种情况下,变量“c”如何获取输入,如果我在%d和%c规范之间包含空格,它会有什么不同?
#include main() { char c; int i; printf("Enter an Integer and a character : \n"); scanf("%d %c",&i,&c); printf("Integer = %d and Character = %c\n",i,c); getch(); }
如果仔细阅读scanf()
的规范,大多数格式说明符会跳过前导空格。 在标准C中,有三个没有:
-
%n
– 到目前为止已处理了多少个字符 -
%[…]
– 扫描集 -
%c
– 读一个字符。
(POSIX增加了第四个, %C
,相当于%lc
。)
除非转换规范包括
[
,c
,C
或n
转换说明符,否则应跳过输入空白字符(由isspace
指定)。
在%d
和%c
之间添加空格意味着在读取整数之后和读取(非空格)字符之前跳过可选的空格。
scanf
%c
指定符之前的空格指示它跳过任意数量的空格。 换句话说,从标准输入读取,直到和除非发现非空白字符或键盘中断。