gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 14:16:52 25 4
gpt4 key购买 nike

我在远程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:并提供一个并按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;
}

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

#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;
}

关于c - 在等待通过scanf()输入之前,没有通过SSH的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60201830/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com