В то время как цикл, который заканчивается полукононным - PullRequest
0 голосов
/ 26 мая 2019

У меня есть код;

    while(nread = read(fd,&c,1)==0);

Почему цикл завершается точкой с запятой?Не собирается ли эта линия пройти весь ФД, ничего не делая?

Ответы [ 2 ]

0 голосов
/ 26 мая 2019

хорошо, это будет прыгать внутри цикла навсегда, пока условие не будет неудовлетворено так в основном вот пример для цикла for

for(i=0;i<10;i++);
printf("%d",i);

это напечатает 10 непосредственно вместо целой серии чисел

0 голосов
/ 26 мая 2019

Пустой оператор ничего не делает, поэтому

while(nread = read(fd,&c,1)==0);

эквивалентно

while(nread = read(fd,&c,1)==0) { }

Вот что делает утверждение:

  • Если read возвращает 1 (потому что он прочитал один символ), цикл немедленно завершится (после установки nread в 0).
  • Если read возвращает 0 (потому что он достиг EOF), он попытается прочитать снова (который может возвращать или не возвращать 0).
  • Если read возвращает -1 (поскольку произошла ошибка), он попытается снова прочитать (что может или не может вернуть -1 снова).

Поскольку это может легко перерасти в бесконечный цикл, этот код наверняка нарушен.

...