C编程 – scanf中空格的作用()

我写了以下代码:

#include  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 = %db = %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()中),即使它是三个,为什么它会跳过最后一个?

格式字符串中的空格表示跳过输入中的任何空格序列(空格,换行符,制表符),并在到达第一个非白色字符或输入结尾时停止扫描。 下一个字符留在输入缓冲区中,因此可以由下一个格式操作符(如果有)或下一个输入操作(如果您在scanf()之后调用getc()读取它,它将读取'3'字符。

当您在格式字符串的末尾放置一个空格时,它会在2之后跳过换行符,并继续扫描直到它到达下一个非白色字符。 因此它必须在停止之前到达3