2009-07-05 7 views
3

Ist das überhaupt möglich?C/C++ Eingabe aus dem Programm in stdin hinzufügen?

Lets sagen, dass der Code eine Menge scanf Zeilen hat. Statt manuell Werte beim Debuggen manuell einzugeben und hinzuzufügen, ist es möglich, stdin mit Daten zu "füttern", so dass der scanf die eingelesenen Daten liest, ohne mit dem Terminal interagieren zu müssen.

Antwort

13

Setzen Sie die Testlinien in eine Datei, und das Programm wie folgt ausführen:

myprogram < mytestlines.txt 

Besser als Ihr Programm Hacking irgendwie, dass selbst zu tun.

Wenn Sie den Code debuggen, können Sie den Debugger so einrichten, dass er mit dieser Befehlszeile ausgeführt wird.

4

Um Ihr Programm ein wenig vielseitiger zu machen, sollten Sie in Erwägung ziehen, das Programm neu zu schreiben, um fscanf, fprintf usw. zu verwenden, so dass es bereits Datei IO statt nur Konsole IO verarbeiten kann; dann, wenn Sie auf die Standardausgabe von stdin oder schreiben lesen möchten, müssen Sie nur etwas entlang der Linien von tun:

FILE *infile, *outfile; 

if (use_console) { 
    infile = stdin; 
    outfile = stdout; 
} else { 
    infile = fopen("intest.txt", "r"); 
    outfile = fopen("output.txt", "w"); 
} 
fscanf(infile, "%d", &x); 
fprintf(outfile, "2*x is %d", 2*x); 

Denn wie oft nur Programme stdin/stdout behandeln und keine Dateien erlauben? Besonders wenn Sie Ihr Programm in Shell-Skripten verwenden, kann es expliziter sein, Eingabe und Ausgaben in der Befehlszeile anzugeben.

+0

Das ist ein guter Ratschlag. Sehr geschätzt, und ich werde das in zukünftigen Implementierungen sicher versuchen. Vielen Dank. – Milan

0
int fd[2]; 
pipe(fd); 
close(0); // 0:stdin 
dup(fd[0], 0); // make read pipe be stdin 
close(fd[0]); 
fd[0] = 0; 

write(fd[1], "some text", 9); // write "some text" to stdin 
+0

Ob das die Frage des OP war oder nicht, das ist sehr hilfreich für mich, danke. – rsethc