c 语言 scanf - fflush(stdin) - 不起作用

标签 c stdin scanf fflush

<分区>

当我多次使用 scanf 时,程序不会等待另一输入。相反,它退出

我了解到我可以在 scanf 函数中的转换说明符之前放置一个空格 - 是的,这解决了问题,我猜这与输入流有关,也就是说 - 如果它是输入流中的换行符scanf 将立即使用它。

scanf(" %f", &value);

但如果是这样 - 为什么我不能改用 fflush(stdin)?我已经尝试过,但它不起作用。

#include <stdio.h>

int main(void)
{
    float value;
    char ch;

    printf("input value: ");
    scanf("%f", &value);
    fflush(stdin);
    printf("input char: ");
    scanf("%c", &ch);

    return 0;
}

最佳答案

fflush() 用于清除输出缓冲区。由于您正在尝试清除输入缓冲区,这可能会导致未定义的行为。

这是一个 SO 问题,解释了为什么这不是好的做法:

Using fflush(stdin)

关于c 语言 scanf - fflush(stdin) - 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29730653/

相关文章:

binary - 从 stdin 接收二进制数据,发送到 Go 中的 channel

python - 如何从标准输入读取zip文件

c - 为什么 scanf 要求输入两次,但只是在第一次循环迭代中?

c - 当我不知道它会在 C 中分配多少个值时,如何使用 scanf?

c - 理解为什么我需要 malloc

c++ - 找不到任何 GLU 文档

C. 函数修改动态分配的二维数组时的段错误

eclipse - 导入 scala.io.StdIn

c - 从标准输入读取整数并保存它们 - C

c - 使用 fscanf 读取文件