C语言 中清除输入缓冲区的替代方法

mpgws1up  于 2023-05-16  发布在  其他
关注(0)|答案(3)|浏览(173)

有没有其他方法可以在c中清除输入缓冲区而不用

fflush();

while(getchar()!='\n');

因为我到处都读过了,找不到其他的方法来做。

yacmzcpb

yacmzcpb1#

最好的解决方案是不要太依赖输入缓冲区的状态。
使用fgets()将输入作为整行读取,然后解析它们。不要用例如。scanf()来读取单个值,因为它以令人讨厌的方式与缓冲区进行交互。

wsxa1bj1

wsxa1bj12#

使用fgets()作为suggester @unwind最佳方法。
冲到最后。

void FlushStdin(void) {
  int ch;
  while(((ch = getchar()) !='\n') && (ch != EOF));
}

如果stdin已准备好刷新到行尾,则调用FlushStdin()或其他发布的scanf()fgetc()解决方案将刷新到 next 行尾。
注意,如果下一个char'\n',则scanf("%*[^\n]%*1[\n]"); * 不 * 工作。

ha5z0ras

ha5z0ras3#

清除输入缓冲区(stdin)的另一种方法是使用

scanf("%*[^\n]");
scanf("%*c");

%*[^\n]指示scanf扫描所有内容,直到出现新行字符(\n),然后丢弃它。%*c告诉scanf扫描并丢弃一个字符,在本例中是换行符。

相关问题