这是第一个代码:
int a, b;
scanf("%d%*c%d",&a,&b);
printf("%d %d",a,b);
如果我输入
4
5
打印
4 5
这是第二个代码:
int a,b;
scanf("%d %*c %d",&a,&b);
printf("%d %d",a,b);
如果输入
4
5
6
打印
4 6
为什么%*c
仅在字符被空格包围时才跳过该字符
答案 0 :(得分:1)
你没有输入你认为的那么多:认为两个输入序列是4
然后5
和4
然后5
然后是6
- 您输入的内容是4
换行符 5
和4
换行符 5
换行符 6
- scanf
中的空格可以匹配空格或换行符。
请注意,您还应该测试:
4 5
4,5
4?5
4 5 6
4,5,6
等
答案 1 :(得分:1)
问:为什么在"%*c"
周围使用空格?
答:" %*c"
中的空格是一个scanf()
指令,在扫描期间跳过空格(0或更多),从而阻止"%*c"
自己读取空白区域。如果没有前导空格,"%*c"
将扫描任何 1 char
,是否为空格。 "%*c "
中的尾随空格对"%*c"
已经执行的操作完全没有影响。尾随的white-space指令简单地跳过后续的空格。
"%*c"
周围格式的空格不是 ,这取决于编码目标。
大多数说明符,例如"%d"
,"%f"
,"%s"
都会跳过前导空格。 (空格为' '
,'\n'
,'\t'
等,请参阅isspace()
)。
简单地使用格式指令" "
或"\n"
也会跳过空格。
3个说明符"%c"
,"%n"
和"%[scanset]"
执行而不是跳过前导空格。
由于许多程序员希望scanf()
在"%c"
之前跳过前导空格1>} <{1>}之前。
注意:" %c"
会扫描"%d %*c %d"
。