Domanda

E 'possibile?

Consente di dire che il codice ha un sacco di linee scanf. Invece di correre e aggiungendo valori a mano quando debug manualmente, è possibile "feed" stdin con i dati in modo che quando lo scanf inizia la lettura, leggerà i dati immessi senza alcuna necessità di interagire con il terminale.

È stato utile?

Soluzione

Mettere le linee di prova in un file, ed eseguire il programma in questo modo:

myprogram < mytestlines.txt

Meglio di hacking del programma per fare in qualche modo che se stessa.

Quando si è il debug del codice, è possibile impostare il debugger di eseguirlo con quella linea di comando.

Altri suggerimenti

Per rendere il vostro programma un po 'più versatile, si potrebbe prendere in considerazione riscrivere il programma da utilizzare fscanf, fprintf, ecc in modo che possa già di gestire file di IO invece di consolare solo IO; poi quando si desidera leggere da stdin o scrivere su stdout, si dovrebbe solo fare qualcosa sulla falsariga di:

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);

Perché come spesso i programmi gestiscono solo stdin / stdout e non consentono i file? Soprattutto se si finisce per utilizzare il programma in script di shell, può essere più esplicito per specificare ingressi e uscite sulla riga di comando.

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top