git bash 首先在第一个 printf() 函数之前运行 scanf()

git bash first runs the scanf() before the first printf() function

提问人:Mehedi Hasan 提问时间:10/23/2023 最后编辑:wohlstadMehedi Hasan 更新时间:10/23/2023 访问量:51

问:

我正在做一个简单的 C 程序,它接受输入并显示一些数字。

#include<stdio.h>

int main()
{
    int num1, num2, value;
    char sign;

    printf("Please Enter Your Number1:\n");
    scanf("%d", &num1);

    printf("Please Enter Your Number2:\n");
    scanf("%d", &num2);

    value = num1 + num2;
    sign = '+';
    printf("%d %c %d = %d\n", num1, sign, num2, value);
    return 0;
}

我使用 gcc 作为编译器。

所以这个过程是有一个文本要求输入,然后输入两个数字并显示结果。

现在,如果我在 windows cmd 中编译并运行我的代码,它可以完美运行。完全没问题。

但是,如果我使用 git bash 编译和运行,它会先询问数字,然后再显示询问数字的提示。这就像它在第一个函数之前运行第一个函数一样。scanf()printf()

你知道为什么吗?我只是好奇为什么它会产生不同的结果

首先运行 then 函数。printf()scanf()

c printf scanf git-bash

评论

2赞 chux - Reinstate Monica 10/23/2023
仍然首先运行,只是文本卡在缓冲区中。在 和 之间添加一个可能会有所帮助。IIRC,这是 I/O 接口的 git bash 实现问题,而不是 C 问题,但我不确定。printf()stdoutfflush(stdout);printf("Please Enter Your Number1:\n");scanf("%d", &num1);
0赞 Eric Postpischil 10/23/2023
@chux-ReinstateMonica:最好在程序开始时请求行缓冲,而不是使用 .然后,解决该问题的代码仅限于程序开头的一段代码,而不是分散在完成终端 I/O 的任何地方。setvbuf(stdout, NULL, _IOLBF, 0);fflush
0赞 chux - Reinstate Monica 10/23/2023
@EricPostpischil同意,这看起来更可取。然而恕我直言,它仍然是一个实现 git bash 错误。目前尚不清楚为什么它还没有修复。

答: 暂无答案