我在远程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
?
在描述的特定情况下,从系统上的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;
}