Zawsze używam tego podejściaJaki jest lepszy sposób sprawdzenia EOF i błąd fgetc()?
int c;
while ((c = fgetc(fp))!=EOF)
{
printf("%c", c);
}
Ponieważ wydaje mi się bardziej czytelne i trwałe. Ale do odpowiedzi kopalni link, chux skomentował, że
if (feof (FP)) jest bardziej wytrzymałe niż int c; (EOF (C = fgetc (FP))! =)
jako
while(1)
{
c = fgetc(fp);
if (feof(fp))
{
break ;
}
printf("%c", c);
}
natomiast jest bardziej wytrzymałe niż w pierwszej wersji. Więc jakiej wersji powinienem użyć? Proszę wyjaśnij mi, dlaczego ta wersja jest lepsza.
EDIT
W pytaniu Why is “while (!feof (file))” always wrong? nie zapytał dlaczego feof() w pętli sterowania zawsze źle. Ale sprawdzanie feof()
w jeśli warunek we właściwy sposób jest zawsze błędny? Wyjaśnienie jest znaczące.
Użyj pierwszej wersji. Drugi nie jest "bardziej wytrzymały", ale wymaga znacznie więcej kodowania. Nie sprawdza również pod kątem błędu. – fuz
@user - Nie, właściwym sposobem C++ jest 'while (cin >> c)', i absolutnie ** nie ** 'while (! Cin.eof())'. Zobacz [Dlaczego isostream :: eof w pętli warunku jest uważany za nieprawidłowy] (http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-considered-wrong) –
@Kninnug It nie jest duplikatem tego pytania. – ashiquzzaman33