• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

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

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

nast9

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

nast9

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

lazybiz

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

nast9

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

lazybiz

Тогда только так:
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 ) { ... }
}
 
L

lazybiz

нет. тут нет синтаксических ошибок
 
A

a0z

В одну строку? Как-то так, не проверял.

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

nast9

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

lazybiz

Так у тебя изначально i-й элемент будет неопределенным. Этот вариант с точки зрения логики не правильный.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!