1. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление

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

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

  1. nast9

    nast9 Гость

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

    nast9 Гость

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

    lazybiz Well-Known Member

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

    nast9 Гость

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

    lazybiz Well-Known Member

    Репутация:
    0
    Регистрация:
    3 ноя 2010
    Сообщения:
    1.339
    Симпатии:
    0
    Тогда только так:
    Код:
    for (; c[i] != EOF; ++i ) {
    c[i] = getc( f );
    if ( i == 255 ) { ... }
    }
    Но проблема заключается в том, что изначально c будет иметь неопределенное значение. Соответственно код не будет отражать то что ты написал изначально.

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

    nast9 Гость

    Репутация:
    0
    а вот (; <- означает ошибку ?
     
  7. lazybiz

    lazybiz Well-Known Member

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

    a0z Well-Known Member

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

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

    nast9 Гость

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

    lazybiz Well-Known Member

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

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