문제

그게 가능할까요?

코드에 많은 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
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top