Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在等待通过scanf()输入之前,SSH上没有输出_C_Ssh_Scanf_Fflush - Fatal编程技术网

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

在等待通过scanf()输入之前,SSH上没有输出,c,ssh,scanf,fflush,C,Ssh,Scanf,Fflush,我在远程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

我在远程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;
}
#包括
int main(){
int输入;
printf(“给出一个整数:”);
fflush(stdout);
scanf(“%d”,输入(&I));
printf(“重试:”;
scanf(“%d”,输入(&I));
printf(“您说…%d\n”,输入);
返回0;
}
我有一个从本地WSL编译和运行此文件的命令:

sshpass-f pass.txt sshusername@remote.host.address“cd path/to/file/&gcc get_int.c&&a.out”

当我执行这个命令时,我成功地得到提示
给出一个整数:
并提供一个整数,然后按enter键。但是,我没有得到提示
重试:
。我仍然可以键入一个整数(123)并按enter键。当我这样做时,它会打印
再试一次:你说。。。123


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

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

#包括
int main(){
int输入;
printf(“给出一个整数:”);
fflush(stdout);
scanf(“%d”,输入(&I));
printf(“重试:”;
fflush(stdout);
scanf(“%d”,输入(&I));
printf(“您说…%d\n”,输入);
返回0;
}
或者,您可以将输出流设置为未缓冲,并且根本不需要刷新它:

#包括
int main(){
int输入;
setvbuf(标准输出,空,0);
printf(“给出一个整数:”);
scanf(“%d”,输入(&I));
printf(“重试:”;
scanf(“%d”,输入(&I));
printf(“您说…%d\n”,输入);
返回0;
}

在“重试:
printf
之后添加一个[第二个]
fflush
不会有什么坏处,就像第一个
printf
一样,您可以将这个
printf
/
fflush
序列包装在宏中,或者使用
setbuf
设置无缓冲。或者,您可以使用
..
va_start
va_end
vprintf
printf
编写一个包装函数,标题有点误导--
scanf
实际上并不能阻止任何事情…@Peter,我同意;只是不知道如何表达标题。@CraigEstey我想这不会有什么坏处,尽管每次扫描都要刷新是很烦人的。我想知道/询问是否有什么方法可以更改我的SSH命令,以便在不必一直刷新的情况下正确显示输出。@jhud没问题,我擅自更改了它,希望效果更好。若你们不喜欢它,简单地恢复,并没有什么害处。我想最简单的方法就是简单地将它设置为无缓冲。在这种交互式应用程序中,性能是不相关的。(当然,如果这只是一个非交互式通信缓冲的概念证明,那么可能再次是必要的。)对,我认识到,对于我当前的设置,我必须在每次
scanf
之前
fflush
。然而,这是非常乏味的。我的问题是:有没有办法更改我的SSH命令,这样我就不必刷新stdout了?@jhud:is手动刷新是不是因为输出实例太多而很乏味,只需将流设置为无缓冲,如修改后的答案所示。刷新问题可能与
ssh
配置无关。@chqrlie喜欢第二种解决方案!如果SSH确实不是问题所在,那么这似乎是最好的选择,因为它只是main顶部的一行。