2016-10-01 1 views
-1

Je souhaite exécuter un code C via Java pour imprimer un nombre entier entré par l'utilisateur. J'utilise classe ProcessBuilder.Impossible d'exécuter et d'entrer le code C via Java

Le code Java donne la même sortie (stdout: 0) pour chaque entier que j'ai entré par outputstream.

public class test { 
    public static void main(String args[]) throws IOException { 
     String line; 
     ProcessBuilder builder = new ProcessBuilder("first1.exe"); 
     Process process = builder.start(); 
     OutputStream stdin = process.getOutputStream(); 
     InputStream stdout = process.getInputStream(); 
     InputStream err=process.getErrorStream(); 
     BufferedReader reader = new BufferedReader(new InputStreamReader(stdout)); 
     BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(stdin)); 
     writer.write(8); 
     writer.flush(); 
     line = reader.readLine(); 
     System.out.println("Stdout: " + line); 
    } 
} 

Je reçois toujours la sortie:

stdout:0 

Le code C pour first1.exe est:

#include <stdio.h> 
int main() 
{ 
    int n; 
    scanf("%d",&n); 
    printf("%d",n); 
    return 0; 
} 

Répondre

0

utilisation

process.waitFor(); 
writer.write(8+"\n"); 
enter code here 
0

Dans le code ci-dessus lorsque le code C first1.exe exécute, il attend qu'une entrée soit donnée.

Ici l'auteur écrit juste et ne fait rien alors que le code first1.exe oblige l'utilisateur à écrire et appuyez sur Entrée.

Le code ci-dessus ne fonctionne pas car entrée ou nouvelle ligne n'est pas donnée. Remplacer la ligne writer.write(8); par writer.write(8+"\n"); et ajouter process.waitFor() avant writer.write(8+"\n") et cela fonctionnera correctement.

Lors du remplacement de l'instruction, le code donne stdout:8 en sortie.