Разложить текст

  • Автор темы nast9
  • Дата начала
N

nast9

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

nast9

#2
Надо опустить getc вниз то есть разложить на два действия.
 

lazybiz

Well-known member
03.11.2010
1 339
0
#3
Трудно понять что именно тебе нужно... На ум приходит следующий код:
C++:
do {
c[i] = getc( f );
i++;
if ( i == 255 ) {
...
}
} while ( c[i] != EOF );
 
N

nast9

#4
Спасибо, просто говорили что while можно заменить for и расписать одну строку на две, при этом опустив getc вниз.
 

lazybiz

Well-known member
03.11.2010
1 339
0
#5
Тогда только так:
C++:
for (; c[i] != EOF; ++i ) {
c[i] = getc( f );
if ( i == 255 ) { ... }
}
Но проблема заключается в том, что изначально c будет иметь неопределенное значение. Соответственно код не будет отражать то что ты написал изначально.

Добавлено: Вот так будет работать как в твоем варианте, но я считаю этот вариант извращенным...
C++:
for (;;) {
if ( (c[i] = getc( f )) == EOF ) break;
++i;
if ( i == 255 ) { ... }
}
 

a0z

Well-known member
15.03.2011
108
0
#8
В одну строку? Как-то так, не проверял.

C++:
for (c[0] = getc(f),i=0;c[i] != EOF;c[++i]=getc(f))
{
if ( i == 255 ) { ... }
}
 
N

nast9

#9
Сегодня сказали что,
C++:
for (; c[i] != EOF; ++i ) {
c[i] = getc( f );
if ( i == 255 ) { ... }
}
слегка не правильный вариант, то что c=getc(f) нельзя так сравнивать, т.к считываться в таком варианте будет не весь файл а только его половина. Сказали что надо использовать int.
 

lazybiz

Well-known member
03.11.2010
1 339
0
#10
Так у тебя изначально i-й элемент будет неопределенным. Этот вариант с точки зрения логики не правильный.