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

时间:2017-01-08 15:24:58

标签: c scanf

我写了以下代码:

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

1 个答案:

答案 0 :(得分:3)

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

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