C / C ++ de entrada add para stdin do programa?
Pergunta
Isso é mesmo possível?
Vamos dizer que o código tem um monte de linhas scanf. Em vez de correr e agregando valores à mão quando a depuração manualmente, é possível "feed" stdin com dados de modo que quando o scanf começa a ler, ele irá ler os dados introduzidos sem qualquer necessidade de interagir com o terminal.
Solução
Coloque as linhas de teste em um arquivo e execute o programa como este:
myprogram < mytestlines.txt
Melhor do que hackear seu programa de alguma forma fazer isso em si.
Quando você está depurando o código, você pode configurar o depurador para executá-lo com essa linha de comando.
Outras dicas
Para fazer o seu programa um pouco mais versátil, você pode querer considerar reescrever seu programa para uso fscanf
, fprintf
, etc, para que ele já pode lidar com IO arquivo ao invés de apenas consolar IO; então quando você quer ler de stdin ou escrever para stdout, você teria apenas que fazer algo ao longo das linhas 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);
Porque quantas vezes programas apenas lidar com stdin / stdout e não permitir que arquivos? Especialmente se você acabar usando o seu programa em shell scripts, pode ser mais explícito para especificar a entrada e saídas na linha de 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