C/C++가 프로그램의 stdin에 입력을 추가합니까?
문제
그게 가능할까요?
코드에 많은 scanf 줄이 있다고 가정해 보겠습니다.디버깅할 때 수동으로 실행하고 값을 추가하는 대신, scanf가 읽기를 시작할 때 터미널과 상호 작용할 필요 없이 입력된 데이터를 읽을 수 있도록 stdin에 데이터를 "공급"할 수 있습니까?
해결책
테스트 라인을 파일에 넣고 다음과 같은 프로그램을 실행하십시오.
myprogram < mytestlines.txt
어떻게 든 프로그램을 해킹하는 것보다 낫습니다.
코드를 디버깅 할 때는 해당 명령 줄을 사용하여 디버거를 설정할 수 있습니다.
다른 팁
프로그램을 좀 더 다양하게 만들려면 다음과 같이 프로그램을 다시 작성하는 것이 좋습니다. fscanf
, fprintf
, 등.콘솔 IO가 아닌 파일 IO를 이미 처리할 수 있도록 합니다.그런 다음 stdin에서 읽거나 stdout에 쓰려는 경우 다음과 같은 작업을 수행하면 됩니다.
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
제휴하지 않습니다 StackOverflow