C / C ++ добавить входные данные в stdin из программы?
Вопрос
Возможно ли это вообще ?
Допустим, что в коде много строк scanf.Вместо ручного запуска и добавления значений вручную при отладке, возможно ли "скормить" stdin данные, чтобы, когда scanf начнет чтение, он считывал введенные данные без какой-либо необходимости взаимодействовать с терминалом.
Решение
Поместите тестовые строки в файл и запустите программу следующим образом:
myprogram < mytestlines.txt
Лучше, чем взламывать вашу программу, чтобы каким-то образом сделать это самой.
Когда вы отлаживаете код, вы можете настроить отладчик на его запуск с помощью этой командной строки.
Другие советы
Чтобы сделать вашу программу немного более универсальной, вы можете рассмотреть возможность переписывания вашей программы для использования fscanf
, fprintf
, и т.д.так что он уже может обрабатывать файловый ввод-вывод в отличие от простого консольного ввода-вывода;затем, когда вы захотите прочитать из stdin или записать в стандартный вывод, вы просто сделаете что-то вроде:
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);
Потому что как часто программы обрабатывают только stdin / stdout и не разрешают файлы?Особенно, если вы в конечном итоге используете свою программу в сценариях командной оболочки, может быть более явным указание входных и выходных данных в командной строке.
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