C 中的 scanf 阻塞程序

问题描述 投票:0回答:1

今天我遇到了一个问题,我决定按照教程开始学习 C,并且到了我的程序编译但只是阻塞的地步 代码:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int age;

    printf("Enter your age: ");
    scanf("%d", &age);
    printf("%d", age);
    return 0;
}

编译后的以下代码不显示任何内容,程序永远不会退出

c scanf
1个回答
0
投票

您的系统似乎需要在尝试从

stdout
读取之前手动将输出刷新到
stdin
。这通常不是必需的,但根据 IDE 的实现方式,读取时自动刷新的机制可能无效。

Enter your age: 
提示在输出流缓冲区中挂起,因为程序已经在等待将输入转换为
int
,来自终端的输入是行缓冲的,因此它只能用于
scanf()
一旦用户按下 Enter 键。

这里是修改版:

#include <stdio.h>

int main(void) {
    int age;

    printf("Enter your age: ");
    fflush(stdout);
    if (scanf("%d", &age) == 1) {
        printf("%d\n", age);
    } else {
        printf("invalid input\n");
    }
    return 0;
}
© www.soinside.com 2019 - 2024. All rights reserved.