Если я использую функцию fgets() для поиска определенного разделителя в текстовом файле, как мне убедиться, что fgets() не зацикливается на EOF?
Я объединяю все строки от delimiter1 до delimiter2 в struct1[i].string1, где i — n-е вхождение шаблона delimiter1/delimiter2. Этот шаблон продолжается по всему текстовому файлу до самого конца, где вместо delimiter2 есть EOF. Я также хочу объединить все от delimiter1 до 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++;
}
}
}
Однако, когда я пытаюсь запустить этот код, я застреваю в бесконечном цикле. Я поместил оператор печати во внутренний цикл while, показывающий, что такое целое число «i», и оно застряло на числе 4, что является общим количеством delimiter1 в текстовом файле, что заставило меня поверить, что EOF дает мне бесконечный цикл.
Любая помощь будет оценена по достоинству.
temp_string
для проверки EOF,fgets()
вернет NULL при возникновении EOF/ошибки. Чтобы отличить ошибку от EOF, используйтеfeof
. - person Anish Ramaswamy   schedule 27.03.2013