내 프로그램은 .DAT 파일의 숫자를 표시하는 데 사용됩니다. 각 줄에는 2 개의 필드가 있습니다. 예를 들어 : .DAT 파일의 내용 :fgets를 사용하여 C에서 빈 행 건너 뛰기
1 2.2
3 10.9
10 100
는 .DAT 파일에 4 개 라인이 있습니다. 첫 번째 줄에서 field1은 "1"이고 field2는 "2.2"입니다. 3 번 줄은 빈 줄입니다. 우리가있는 .DAT 파일에 참조로
내 프로그램은 동일한 형식으로 숫자를 표시하는 데 사용됩니다 :
1 2.2
3 10.9
10 100
나는 우분투에서 내 모든 프로그래밍을한다. gcc에서 프로그램 컴파일 및 실행.
내 코드는 다음과 같습니다 :
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
int main()
{
FILE *fp = fopen("number.dat", "r");
if (fp == NULL)
{
fprintf(stderr, "ERROR: cannot open the file\n");
return 1;
}
char *field1 = NULL;
char *field2 = NULL;
char line[100];
while(fgets(line, 100, fp)!=NULL)
{
if(line[0] != '\n')
{
field1 = strtok(line, " ");
field2 = strtok(NULL, " ");
printf("%s ", field1);
printf("%s", field2);
}
else
{
printf("Blank Line!");
}
}
fclose(fp);
return 0;
}
그러나, 나는이 프로그램을 실행 한 후, 그 결과는 다음과 같다 :
1 2.2
3 10.9
(null)10 100
내가 왜 이해하지 않는다 "(널)"표시됩니다 "공백 라인!"대신. 누군가가 문제의 원인을 찾도록 도와 줄 수 있습니까?
빈 줄에는 공백 문자 (탭 등)가 포함될 수 있습니다. 'fgets()'가 그것들을 집을 것이다. 그러나'strtok()'호출은 공백 문자 이외의 공백 문자를 선택하지 않습니다. – Peter
@alk "rt"를 시도했습니다. 하지만 여전히 작동하지 않습니다. –
@Gareth lam - 수정 한 후에 GCC와 잘 작동합니다. –