Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Разложить текст


Автор: 4amba 23.5.2011, 19:20
Здравствуйте, можете помочь разложить текст чтобы стал более понятным.
Есть кусок программы:
while(c[i]=getc(f)!=EOF)
{
++i
if (i==255)
{
}
}
Не могу понять как разложить цикл, как мне говорили в нем можно опустить getc и тогда while по идее у нас меняется на for.

Автор: triclosan 23.5.2011, 20:59
с позиций дзен while круче чем for

Автор: volatile 24.5.2011, 00:16
for (i=0; i<10; ++i)
{
   ...
}

равнозначно

i=0;
while (i<10)
{
   ...
   ++i;
}

компилятор в обоих случаях создаст идентичный код 1 в 1.
Это просто некоторое удобство для программиста. В принципе если бы не было for, то можно было бы обойтись только while.
И наоборот.

зы: а то что вы написали, вообще смысла не имеет.

Автор: bsa 24.5.2011, 13:58
Цитата(4amba @  23.5.2011,  19:20 Найти цитируемый пост)
c[i]=getc(f)!=EOF
данный код присваивает c[i] результат сравнения полученного символа с EOF. А так как при не пустом вводе символ не будет EOF, то цикл завершится сразу.
В следующий раз рекомендую использовать скобки.

Автор: borisbn 24.5.2011, 15:13
Цитата(bsa @  24.5.2011,  13:58 Найти цитируемый пост)
А так как при не пустом вводе символ не будет EOF, то цикл завершится сразу.

c[i] в этом случае будет равно true или 1, и цикл не завершится, а будет крутиться вечно  smile 

Автор: bsa 24.5.2011, 16:05
borisbn, точно. заработался.

Автор: 4amba 24.5.2011, 20:53
а можно как нибудь изменить c[i]=getc(f) чтоб использовать int , т.к при таком выражении то считывается половина файла а не весь.

Автор: bsa 24.5.2011, 23:18
4amba
Код
for(;; ++i) {
   int code = getc(f);
   if (code == EOF)
      break;
   c[i] = (char)code;
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)