C中scanf函数的格式说明符中%c规范之前的空格

时间:2016-04-08 15:56:58

标签: c scanf format-specifiers

当我在以下程序中的scanf函数的格式字符串中不包含%d和%c规范之间的空格时,并在运行时将输入作为“4 h”,则输出为“Integer = 4”和Character =。

在这种情况下,变量“c”如何获取输入,如果我在%d和%c规范之间包含空格,它会有什么不同?

#include<stdio.h>
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();
}

2 个答案:

答案 0 :(得分:5)

如果仔细阅读scanf()的规范,大多数格式说明符都会跳过前导空格。在标准C中,有三个没有:

  • %n - 到目前为止已处理了多少字符
  • %[…] - 扫描集
  • %c - 读一个角色。

(POSIX添加第四个%C,相当于%lc。)

  

除非转化规范包含isspace[c或{{1>,否则应跳过输入空白字符(由C指定)转换说明符。

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

答案 1 :(得分:1)

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