Linux 使用其他程序写入scanf

Linux 使用其他程序写入scanf,linux,shell,Linux,Shell,我有一个程序,通过读取标准输入流,stdin,并将其打印到stdout。我想通过另一个程序发送输入。我怎样才能解决这个问题 比如: echo hi | ./prog 但目前的工作并不像预期的那样。prog目前看起来像 #include <stdio.h> int main() { char buf[200]; scanf("%s",buf); printf("%s",buf); } #包括 int main() { char-buf[200]; scanf(“%s”,buf)

我有一个程序,通过读取标准输入流,
stdin
,并将其打印到
stdout
。我想通过另一个程序发送输入。我怎样才能解决这个问题

比如:

echo hi | ./prog 
但目前的工作并不像预期的那样。prog目前看起来像

#include <stdio.h>

int main()
{
char buf[200];
scanf("%s",buf);
printf("%s",buf);
}
#包括
int main()
{
char-buf[200];
scanf(“%s”,buf);
printf(“%s”,buf);
}

谢谢您的帮助。

由于
%s
忽略前导空格并在后面的第一个空格处停止,您可能希望在打印中包含换行符:

#include <stdio.h>

int main(void)
{
    char buf[200];
    scanf("%199s", buf);
    printf("%s\n",buf);
    return 0;
}
#包括
内部主(空)
{
char-buf[200];
scanf(“%199s”,buf);
printf(“%s\n”,buf);
返回0;
}

这将从标准输入中读取最多199个字符的“单词”,并将其写入标准输出。

该程序为我工作

$ cat >prog.c
#inlcude <stdio.h>
int main()
{
  char buf[200];
  scanf("%s",buf);
  printf("%s",buf);
}
$ make prog
cc     prog.c   -o prog
$ echo hi | ./prog 
hi 
$cat>prog.c
#内因库德
int main()
{
char-buf[200];
scanf(“%s”,buf);
printf(“%s”,buf);
}
$make prog
cc程序c-o程序
$echo hi |/prog
你好

请提供任何相关代码,以获得有关此问题的帮助。以何种方式,它无法按预期工作?你期待什么?实际结果如何?这个程序看起来有效,但毫无意义。。你还期待什么其他功能?我希望程序以“hi”回应,但它不会打印任何内容。你可能没有编译它……这很好用。问题是我不能在这种情况下更改代码,因为问题的根源是二进制代码file@jarCrack然后尝试“echo hi |./prog;echo”,这样,当输入
hi
时,您有一个响应
hi
的可执行文件,但它忽略了您?这将是很难调试的。要查看的一件事是程序的退出状态(可执行文件),并查看它是零(成功)还是非零(失败)。如果它是非零的,那么您提供的内容可能对它作为输入不满意。如果它是零,您可能仍然有这个问题-即使程序失败,程序以零状态退出也不是未知的-但是有一个假设它是有效的。你怎么知道程序应该做什么?提示不是在
hi
之后立即出现吗?。。。是的,提示确实出现在“hi”之后,这是意料之中的,因为没有打印换行符,我不确定我是否能说出OP是不是在抱怨…@JonathanLeffler提示会发生什么取决于shell。。。非常确定的是,zsh可以被配置为检查这个问题,而不是阻塞最后一行,添加一个crlf本身,一些shell首先只输出一个回车或光标移动序列,以确保它们位于最左边的列中。