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 。)

除非转换规范包括[cCn转换说明符,否则应跳过输入空白字符(由isspace指定)。

%d%c之间添加空格意味着在读取整数之后和读取(非空格)字符之前跳过可选的空格。

scanf %c指定符之前的空格指示它跳过任意数量的空格。 换句话说,从标准输入读取,直到和除非发现非空白字符或键盘中断。