scanf阻止通过SSH输出

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

我在远程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 [email protected] "cd path/to/file/ && gcc get_int.c && a.out"

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

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

c ssh scanf fflush
1个回答
0
投票

在描述的特定情况下,从系统上的stdout读取时,似乎没有刷新到stdin的输出。在每次调用stdout之前,必须用fflush()显式刷新scanf()

#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;
}
© www.soinside.com 2019 - 2024. All rights reserved.