在等待通过 scanf() 输入之前,没有通过 SSH 的输出

No output over SSH before waiting for input via scanf()

我在远程 Unix 系统上有一个名为 get_int.c 的文件,其中包含以下内容:

#include <stdio.h>

int main() {
    int input;

    printf("Give an integer: ");
    fflush(stdout);
    scanf("%d", &input);

    printf("Try again: ");
    scanf("%d", &input);

    printf("You said... %d\n", input);

    return 0;
}

我有一个编译命令,运行 来自本地 WSL 的这个文件:

sshpass -f pass.txt ssh username@remote.host.address "cd path/to/file/ && gcc get_int.c && a.out"

当我执行这条命令时,成功得到提示Give an integer:并提供一个并回车。然后,但是,我没有得到提示 Try again:。我仍然可以输入一个整数 (123) 并按回车键。当我这样做时,它会打印 Try again: You said... 123

如您所见,在我 fflush(stdout) 或程序结束之前不会进行打印。我可以修改我的 ssh 命令,以便输出到本地终端而不必在每个 scanf 之前 fflush 吗?

在所描述的特定情况下,在您的系统上从 stdin 读取时,stdout 的输出似乎不会被刷新。在每次调用 scanf():

之前,您必须用 fflush() 显式刷新 stdout
#include <stdio.h>

int main() {
    int input;

    printf("Give an integer: ");
    fflush(stdout);
    scanf("%d", &input);

    printf("Try again: ");
    fflush(stdout);
    scanf("%d", &input);

    printf("You said... %d\n", input);

    return 0;
}

或者,您可以将输出流设置为无缓冲,根本不需要刷新它:

#include <stdio.h>

int main() {
    int input;

    setvbuf(stdout, NULL, _IONBF, 0);

    printf("Give an integer: ");
    scanf("%d", &input);

    printf("Try again: ");
    scanf("%d", &input);

    printf("You said... %d\n", input);

    return 0;
}