当我在以下程序中的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();
}
答案 0 :(得分:5)
如果仔细阅读scanf()
的规范,大多数格式说明符都会跳过前导空格。在标准C中,有三个没有:
%n
- 到目前为止已处理了多少字符%[…]
- 扫描集%c
- 读一个角色。(POSIX添加第四个%C
,相当于%lc
。)
除非转化规范包含
isspace
,[
,c
或{{1>,否则应跳过输入空白字符(由C
指定)转换说明符。
在n
和%d
之间添加空格意味着在读取整数之后和读取(非空格)字符之前跳过可选的空格。
答案 1 :(得分:1)
%c
中scanf
说明符之前的空格指示它跳过任意数量的空格。换句话说,从标准输入读取,直到和除非发现非空白字符或键盘中断。