fgets() 함수를 사용하여 텍스트 파일 전체에서 특정 구분 기호를 검색하는 경우 fgets()가 EOF에서 무한 루프하지 않도록하려면 어떻게해야합니까?무한 루프에서 fgets()가 멈추다
나는 delimiter1/delimiter2 패턴의 n 번째 항목 인 struct1 [i] .string1에 delimiter1에서 delimiter2까지의 모든 라인을 연결합니다. 이 패턴은 끝까지 텍스트 파일 전체에 걸쳐 계속됩니다. 대신에 delimiter2 대신에 EOF가 있습니다. 구분 기호 1부터 EOF까지 모두 연결하려고합니다.
int i;
while(fgets(temp_string,100,inFile) != NULL){
if(strcmp(temp_string,"Delimiter1")==0){ //checks to see if current line is delimiter1
j=strcmp(temp_string,"Delimiter2");
while(j!=0 && temp_string != NULL){ //Here I try to exit if it is the EOF
fgets(temp_string,100,inFile);
strcat(struct1[i].string1,temp_string);
j= strcmp(temp_string,"Delimiter2"); //update comparator
}
i++;
}
}
}
그러나이 코드를 실행하려고하면 무한 루프가 발생합니다. 나는 inner "while"에 print 문을 두었다가 정수 "i"가 무엇인지를 보여 주며, 텍스트 파일에있는 delimiter1의 총 수인 4 번에서 멈추어 서 EOF가 나를 제공한다고 믿게한다. 무한 루프.
도움을 주시면 감사하겠습니다.
fgets가 획득 한 문자 수를 반환하지 않습니까? – Patashu
EOF를 확인하기 위해'temp_string'을 사용하는 대신,'fgets()'는 EOF/오류가 발생할 때 NULL을 반환합니다. 오류와 EOF를 구분하려면 ['feof'] (http://pubs.opengroup.org/onlinepubs/009695299/functions/feof.html)을 사용하십시오. –
@Patashu 반환 유형은 'char *'입니다. 크기를 얻으려면 strlen을 사용할 수 있습니다. – CuriousSid