添加scanf使Java中的processInputStream消失

添加scanf使Java中的processInputStream消失,java,c,io,pipe,Java,C,Io,Pipe,我尝试在JavaOne中运行一个C程序,JavaOne应该得到我的C程序的stdin/statdout。当我向C代码添加scanf时,C似乎看不到Java的输出 当我在C中只使用printfs并告诉Java使用readLine时,它就工作了。当我在C中添加Java write to process但尚未scanfs时,它也可以工作,只是C忽略了Java的输出。当我在printf之后添加scanf(我可以在printf sleep()之前进行,将几个printf()放入行中,等等)时,我再也看不到

我尝试在JavaOne中运行一个C程序,JavaOne应该得到我的C程序的
stdin
/
statdout
。当我向C代码添加
scanf
时,C似乎看不到Java的输出

当我在C中只使用
printf
s并告诉Java使用
readLine
时,它就工作了。当我在C中添加Java write to process但尚未
scanf
s时,它也可以工作,只是C忽略了Java的输出。当我在
printf
之后添加
scanf
(我可以在
printf sleep()
之前进行,将几个
printf()
放入行中,等等)时,我再也看不到
printf()
在Java内部的效果,尽管它是先执行的

C中的
fflush()
允许Java查看
printf()
,但C仍然看不到Java的写入。还尝试了
writer.flush()和Java中的多次写入,但没有任何效果。并且还尝试通过ProcessBuilder运行该流程,没有任何区别

public static void main(String[] args) throws IOException, InterruptedException {

 Process process = Runtime.getRuntime().exec("Project9.exe");

InputStream processInputStream = process.getInputStream();
OutputStream processOutputStream = process.getOutputStream();
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(processOutputStream));
BufferedReader reader = new BufferedReader(new InputStreamReader(processInputStream));
String val;
int n=0;
while(true){

    while((val=reader.readLine())!=null){
    System.out.println(val);
    }
    writer.write(n);
    writer.newLine();
    n++;
}
和C程序:

#include <stdlib.h>
#include <stdio.h>

int main() {

    int n=0;
    while (1) {
        printf("test %d\n", n);
        printf("test %d\n", n);
        printf("test %d\n", n);
        printf("test %d\n",n);
        fflush(stdout); //(1)
        scanf("%d", &n);
    }
return;
}
#包括
#包括
int main(){
int n=0;
而(1){
printf(“测试%d\n”,n);
printf(“测试%d\n”,n);
printf(“测试%d\n”,n);
printf(“测试%d\n”,n);
fflush(stdout);/(1)
scanf(“%d”和“&n”);
}
返回;
}
注释了
fflush
scanf
后,程序正确地循环。使用
scanf
但不使用
fflush
即使是
printf
s也不会出现在输出中,尽管它们是先执行的。使用
fflush
我可以到达执行
scanf()
的点,但是C程序似乎没有看到Java的输出,C程序停止在
scanf()
上等待输入,而Java程序在
readLine()
上等待输入。因此,当我通过
fflush()
解决一个问题时,我不知道为什么人工输入的C在Java执行时工作正确而错误(我也不知道为什么只有Java执行时才需要
fflush()


问题只是
scanf()
似乎看不到Java的写入。

stdin
stdout
上尝试
setvbuf
,将第二个参数设置为
\u IONBF
有助于消除对fflush()的需求,并解释为什么可能需要它,但似乎仍然无法与scanf()一起工作我的Java知识有些生疏,因此我不得不问,您是否检查过您的Java程序是否在((val=reader.readLine())!=null)
循环时离开
,谢谢。它起作用了。删除while后,只需将其设置为打印即可。在
stdin
stdout
上尝试
setvbuf
,将第二个参数设置为
\u IONBF
有助于删除对fflush()的需要,并解释为什么可能需要它,但似乎对scanf()仍不起作用我的Java知识有些生疏,因此我不得不问,您是否检查过您的Java程序是否在((val=reader.readLine())!=null)
循环时离开
,谢谢。它起作用了。在删除while并将其设置为“打印”后,它可以正常工作。