This question already has answers here:
Using fflush(stdin)

(7 个回答)


4年前关闭。




当我多次使用 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/

10-14 20:31