C / C ++ добавить входные данные в stdin из программы?

StackOverflow https://stackoverflow.com/questions/1084039

  •  23-08-2019
  •  | 
  •  

Вопрос

Возможно ли это вообще ?

Допустим, что в коде много строк 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top