• Почему префиксный инкремент в логическом выражении не прибавляет единицу после вычисления?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Потому что i++ == 0, что приводится к false. Значит второй член конъюнкции (++j) вычислять смысла нет, результат от него не зависит. Первый член дизъюнкции false, значит вычисляем второй (k == 0). Он тоже false, поэтому вычисляем третий (l++) и берём его значение как результат выражения.
    В общем, конъюнкция (&&) вычисляется до первого встреченного false, дизъюнкция (||) - до первого встреченного true.
    Ответ написан
    Комментировать
  • Почему выводится ноль при использовании несоответствующего спецификатора в printf()?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Потому что в функции printf вообще нет приведения типов.
    Она просто берёт переданные данные и трактует их согласно спецификации формата.
    То есть, в вашем случае выполняется не (float)i, а *((float *)&i).
    If any argument after default argument promotions is not the type expected by the corresponding conversion specifier, or if there are fewer arguments than required by format, the behavior is undefined.
    Ответ написан
    4 комментария
  • Почему работает (++i)++, но не работает ++(i++)?

    15432
    @15432
    Системный программист ^_^
    (i++) возвращает число, константу, если упрощенно. Которую нельзя инкрементить, потому что это не переменная

    (++i) же возвращает ссылку на переменную, которую можно инкрементнуть ещё раз.

    например, ++(++i) - можно. (i++)++ - нельзя.
    Ответ написан
    3 комментария
  • Почему не работает вывод значения переменной в цикле for?

    includedlibrary
    @includedlibrary
    Всё правильно работает, просто нужно добавить в конец вводимого текста символ конца файла. В linux это делается нажатием Ctrl-D, в windows - Ctrl-Z
    Ответ написан
    Комментировать
  • Почему не работает вывод значения переменной в цикле for?

    @TheCalligrapher
    Код ничего не выводит просто потому, что цикл никогда не завершается.

    Нажатие клавиши Enter не приводит к возврату EOF из getchar(). Для того, чтобы создать ситуацию EOF при консольном вводе, вам нужно обратиться к документации на ваш терминал. Разные терминалы работают в этом отношении по-разному и их поведение может зависеть от их конфигурации.

    Для Linux терминалов EOF обычно возникает, если нажать Ctrl+D при пустом входном буфере. "При пустом входном буфере" означает, что Ctrl+D нужно нажимать либо в начале новой строки, либо сразу после предыдущего нажатия Ctrl+D.

    Для Windows терминалов EOF формируется, если ввести Ctrl+Z в начале новой строки и затем ввести Enter.

    Отдельно стоит посоветовать вам завершать вывод символом перевода строки: printf("%.0f\n", nc);
    Ответ написан
    Комментировать