为什么在使用scanf输入值时在%d和%c之间放置空格

pra*_*nav 5 c

我是C的初学者,我正在编写一个代码来打印用户输入字符的正方形.

通常当我们需要输入两个整数(比如x和y)时scanf() 我们写这个scanf("%d%d", &x, &y)但是根据我的代码的需要我应该输入一个整数(比如m)和一个字符(比如ch).

我把它写成了scanf("%d%c", &x, &ch)但它有一个错误,当我执行程序时它只要求输入积分值然后它就会停止执行.

我搜索了这一点,我发现我需要把间距%d%c作为scanf("%d %c", &x, &ch);

任何人都可以解释为什么我们需要在这之间留出空间吗?

R S*_*ahu 11

格式字符串中的空白字符的含义(来自http://www.cplusplus.com/reference/cstdio/scanf/?kw=scanf):

空白字符:该函数将读取并忽略在下一个非空白字符之前遇到的任何空格字符(空格字符包括空格,换行符和制表符 - 请参阅isspace).格式字符串中的单个空格验证从流中提取的任何数量的空白字符(包括无).

当您的代码是:

scanf("%d%c", &x, &ch)
Run Code Online (Sandbox Code Playgroud)

然后你进入

10
Run Code Online (Sandbox Code Playgroud)

在你的控制台:

  1. 10被读取并存储在x.
  2. 读取并存储换行符ch.

如果你使用

scanf("%d %c", &x, &ch)
Run Code Online (Sandbox Code Playgroud)

然后你进入

10
Run Code Online (Sandbox Code Playgroud)
  1. 10被读取并存储在x.
  2. 消费换行符和其他空白字符.程序等待非空白字符.输入一行输入并且该行中至少存在一个非空白字符后,将读入该行的第一个非白色字符ch.这是因为stdin通常是行缓冲的.