为什么在%* c周围使用空格

时间:2014-01-11 11:26:06

标签: c input output scanf

这是第一个代码:

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仅在字符被空格包围时才跳过该字符

2 个答案:

答案 0 :(得分:1)

你没有输入你认为的那么多:认为两个输入序列是4然后54然后5然后是6 - 您输入的内容是4 换行符 54 换行符 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>}之前。

注意:" %c"会扫描"%d %*c %d"