\n 不保留在缓冲区中吗?

JOH*_*RAS 0 c printf buffer ascii

为什么当我只使用整数时程序运行良好?当我为变量“a”插入一个数字然后按 Enter 键后,不会\n保留在缓冲区中吗?如果它确实存在,那为什么我b也可以初始化?如果我定义b为 char 那么b输出将是b 10;换句话说,换行符。例如,如果我想多次使用(使用什么?)为许多人输入一个名字,我会有什么问题吗?我需要一个清除缓冲区的函数吗?那么出了什么问题以及如何解决这个问题

#include <stdio.h>

int main() {
   int a,b;
   
  printf("a ");
  scanf("%d",&a);
  printf("a=%d",a);
  
  printf("\nb ");
  scanf("%d",&b);
  printf("b=%d",b);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Som*_*ude 5

大多数scanf格式将读取并丢弃前导空白(例如空格、制表符和换行符)。

\n

因此,在所示的代码中,换行符将在第一次调用后保留scanf。但第二次调用scanf将读取并丢弃它。但是,该输入之后的换行符将保留在输入缓冲区中。

\n

唯一读取并丢弃前导空格scanf的三种格式是, (扫描集)和。如果您希望这些格式具有相同的行为,则需要自己在格式字符串中添加显式前导空格。%c%[\xe2\x80\xa6]%n

\n
\n

因为错误处理和无效输入可能很难用 来处理scanf,所以我总是建议使用fgets来读取整行。然后,您可以使用例如sscanf来解析该行。

\n

这样,如果有无效输入,它就不会留在输入缓冲区中。

\n