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

Тема в разделе "Общие вопросы по С и С++", создана пользователем nast9, 23 май 2011.

  1. nast9

    nast9 Гость

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

    nast9 Гость

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

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Трудно понять что именно тебе нужно... На ум приходит следующий код:
    Код (C++):
    do {
    c[i] = getc( f );
    i++;
    if ( i == 255 ) {
    ...
    }
    } while ( c[i] != EOF );
     
  4. nast9

    nast9 Гость

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

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Тогда только так:
    Код (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 ) { ... }
    }
     
  6. nast9

    nast9 Гость

    а вот (; <- означает ошибку ?
     
  7. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    нет. тут нет синтаксических ошибок
     
  8. a0z

    a0z Well-Known Member

    Регистрация:
    15 мар 2011
    Сообщения:
    109
    Симпатии:
    0
    В одну строку? Как-то так, не проверял.

    Код (C++):
    for (c[0] = getc(f),i=0;c[i] != EOF;c[++i]=getc(f))
    {
    if ( i == 255 ) { ... }
    }
     
  9. nast9

    nast9 Гость

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

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Так у тебя изначально i-й элемент будет неопределенным. Этот вариант с точки зрения логики не правильный.
     
Загрузка...

Поделиться этой страницей