像空格这样的修饰符在 scanf 中有什么作用?

what do modifiers like whitespace do in scanf?

#include<stdio.h>
void main()
{
char a,b;
printf("enter a,b\n"); 
scanf("%c %c",&a,&b);
printf("a is %c,b is %c,a,b");
} 

1.what 两个格式说明符之间的空格是否告诉计算机做什么? 2.do 除了 %c 之外的 %d 格式说明符在从那里读取之前清理输入缓冲区?

Wikipedia

whitespace: Any whitespace characters trigger a scan for zero or more whitespace characters. The number and type of whitespace characters do not need to match in either direction.

"%d" 将跳过 whitespace 直到它找到一个整数。

"%c"读取单个字符(而space是一个字符,所以不会跳过)。

1.what does the whitespace in between the two format specifiers tell the computer to do?

格式字符串中的

Whitespace 告诉 scanf 读取(并丢弃)白色 space 字符直到第一个非白色 space 字符(保留未读)1。所以

scanf("%c %c",&a,&b);

将单个字符读入 a(白色 space 或非白色),然后跳过任何白色 space 并将下一个非白色 space 字符读入b

2.do format specifiers like %d other than %c clean input buffer before they read from there?

不太清楚你的意思 - d 将跳过任何前导白色space 并从第一个非白色space 字符开始阅读,c将读取下一个字符,无论它是否为白色space。如果指令失败,它们既不会刷新输入流,也不会写入目标变量(例如,如果输入流中的下一个非白色 space 字符不是数字,d 指令失败,并且与该指令对应的参数将不会更新)。


  1. N1570,§7.21.6.2,第 5 段: “由 white-space 字符组成的指令是通过读取输入直到 第一个非白色 space 字符(保持未读),或者直到没有更多字符可以 被阅读。该指令永远不会失败。”