Question

Est-ce même possible?

Permet de dire que le code a beaucoup de lignes scanf. Au lieu de courir manuellement et en ajoutant des valeurs à la main lors du débogage, est-il possible de « nourrir » stdin avec des données de sorte que lorsque le scanf commence à lire, il lira les données entrées sans avoir besoin d'interagir avec le terminal.

Était-ce utile?

La solution

Mettre les lignes de test dans un fichier, et exécuter le programme comme celui-ci:

myprogram < mytestlines.txt

Mieux que le piratage de votre programme pour faire en quelque sorte que lui-même.

Lorsque vous déboguez le code, vous pouvez configurer le débogueur pour l'exécuter avec cette ligne de commande.

Autres conseils

Pour rendre votre programme un peu plus polyvalent, vous pouvez envisager de réécrire votre programme pour utiliser fscanf, fprintf, etc. afin qu'il puisse déjà gérer le fichier IO, par opposition à la console juste IO; puis quand vous voulez lire ou écrire à stdin stdout, vous voulez simplement faire quelque chose le long des lignes de:

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

Parce que la fréquence ne gèrent que les programmes stdin / stdout et ne pas laisser les fichiers? Surtout si vous vous retrouvez à l'aide de votre programme dans les scripts shell, il peut être plus explicite pour indiquer l'entrée et les sorties sur la ligne de commande.

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top