이 문서에서는 함수를 사용하여 Fscanf 텍스트 줄을 읽을 때 발생하는 문제를 설명합니다.
원래 제품 버전: Visual C
원래 KB 번호: 60336
요약
텍스트 모드에서 파일을 열면 함수를 사용하여 Fscanf 텍스트 줄을 읽으려는 시도가 실패할 수 있으며 파일에서 한 줄의 텍스트만 읽습니다. 구분 기호가 .로 설정됩니다 [^\n]. 함수는 Fscanf 최대로 읽지만 구분 문자를 포함하지 않습니다. 따라서 파일 스트림은 파일의 첫 번째 \n 스트림에서 중지됩니다. 파일 포인터가 구분 문자에 남아 있고 Fscanf 함수가 함수 포인터를 지나서 앞으로 나아갈 수 없으므로 후속 Fscanf 함수 호출이 실패합니다. 구분 문자를 지나 파일 포인터를 이동하려면 다음 두 가지 방법 중 하나를 사용합니다.
다음 함수 호출을 사용하도록 코드를 업데이트합니다
Fscanf.fscanf(stream, "%[^\n]%*c", line)%*c형식 지정자는 입력 스트림에서 한 문자를 읽지만 함수 호출의 매개 변수에fscanf할당하지 않습니다.함수 호출
Fgetc후 함수를Fscanf호출하여 파일 포인터를 문자 이상으로\n이동합니다.
다음 코드 샘플에서는 이 문제를 보여 줍니다. 코드 샘플은 EOF에 도달할 때까지 텍스트 파일에서 줄을 읽고 인쇄해야 합니다. 그러나 코드 샘플은 파일에서 첫 번째 줄만 읽습니다. 파일 문자의 끝을 찾을 수 없으므로 파일 스트림에 문자가 포함된 경우 코드 샘플이 무한 루프에서 \n 실행됩니다.
코드 샘플
FILE *stream;
char line[80];
while ((fscanf(stream, "%[^\n]", line))!= EOF )
{
printf("Line = %s \n",line);
}
다음 코드 예제에서는 이 문제를 해결하기 위해 위의 두 번째 방법을 보여 줍니다.
FILE *stream;
char line[80];
while ((fscanf(stream, "%[^\n]", line))!= EOF)
{
fgetc(stream); // Reads in '\n' character and moves file
// stream past delimiting character
printf("Line = %s \n", line);
}