Frage

Ist das überhaupt möglich?

Nehmen wir an, dass der Code eine Menge Scanf Linien. Anstatt manuell ausgeführt wird und die Werte von Hand Hinzufügen beim Debuggen, ist es möglich, stdin mit Daten „füttern“, so dass, wenn die scanf Lesen beginnt, werden die eingegebenen Daten, ohne dass die Interaktion mit dem Terminal lesen.

War es hilfreich?

Lösung

Setzen Sie die Testlinien in eine Datei, und starten Sie das Programm wie folgt aus:

myprogram < mytestlines.txt

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

Wenn Sie den Code debuggen, können Sie den Debugger einrichten, um es mit dieser Befehlszeile ausführen.

Andere Tipps

Um Ihr Programm ein wenig vielseitiger zu machen, möchten Sie vielleicht Ihr Programm zu prüfen, Umschreiben fscanf zu verwenden, fprintf usw., so dass es bereits Datei IO im Gegensatz umgehen kann nur IO zu trösten; 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 Programme nur stdin / stdout behandeln und keine Dateien erlauben? Vor allem, wenn Sie Ihr Programm in Shell-Skripten am Ende mit, kann es noch deutlicher sein, um Ein- und Ausgänge auf der Befehlszeile angeben.

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top