我写了以下代码:
#include <stdio.h>
int main()
{
int a, b;
printf("Enter values of a and b\n");
scanf(" %d%d ", &a, &b); // Note the two spaces before and after %d
// ^This^
printf("a = %d b = %d\n", a, b);
return 0;
}
程序运行如下:
aps120797@XENON-PC:/mnt/d/Codes/LetUsC$ ./a.out
Enter values of a and b
1
2
3
a = 1 b = 2
我的问题是,为什么它需要三个输入而不是两个(两个%d在scanf()中),即使它是三个,为什么它会跳过最后一个?
答案 0 :(得分:3)
格式字符串中的空格表示跳过输入中的任何空格序列(空格,换行符,制表符),并在到达第一个非白色字符或输入结尾时停止扫描。下一个字符留在输入缓冲区中,因此可以由下一个格式运算符(如果有)或下一个输入操作(如果您在getc()
之后调用scanf()
)读取,它会读取'3'
字符。
当您在格式字符串的末尾放置一个空格时,它会在2
之后跳过换行符,并继续扫描直到它到达下一个非白色字符。所以它必须在停止之前到达3
。