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.

Foi útil?

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top