Многократная печать в цикле For как часть инициализации, условия и обновления

0

Вопрос

Может ли кто-нибудь объяснить мне, почему он печатает 32 и общую концепцию того, как это работает?

#include <stdio.h>

int main()
{
    int a=1;
    for (printf ("3"); printf ("2"); printf ("1"))

    return 0;
}
c loops printf
2021-11-23 21:56:07
2

Лучший ответ

8

Правильный отступ сделает его более четким:

#include <stdio.h>

int main()
{
    int a=1;
    for (printf ("3"); printf ("2"); printf ("1"))
        return 0;
}

Итак, происходит следующее:

  • a инициализируется для 1. Я не знаю, почему эта переменная существует, так как она никогда не использовалась.
  • for выполняет свою инструкцию инициализации, printf("3");. Это печатает 3.
  • for оценивает его условие повторения, printf("2"). Это печатает 2 и возвращает количество напечатанных символов, которое равно 1.
  • Поскольку условие истинно, оно входит в тело цикла.
  • Тело выполняет return 0;. Это возвращает из main(), тем самым завершая цикл.

Поскольку цикл заканчивается, мы никогда не оцениваем выражение обновления, printf("1"), поэтому он никогда не печатается 1. И мы не получаем никакого повторения чего бы то ни было.

2021-11-23 22:04:34
0

Вы знаете, что программа начинает выполняться слева " {"функции main(), заканчивается справа"} " функции main(), если нет бесконечного цикла.

Как показывает ваш код, ваша трудность состоит в том, чтобы понять блок-схему цикла for на языке Си.

Как вы можете видеть, синтаксис цикла for таков:
for (initializationStatement; testExpression; updateStatement)
{
    // statements inside the body of loop
    for loop body;
}
Как работает цикл?

1.Оператор инициализации выполняется только один раз.

2.Затем вычисляется тестовое выражение. Если тестовое выражение оценивается как ложное, цикл for завершается.

3.Однако, если тестовое выражение оценивается как истинное, выполняются операторы внутри тела цикла for и обновляется выражение update.

4.Снова вычисляется тестовое выражение.

Этот процесс продолжается до тех пор, пока тестовое выражение не станет ложным. Когда тестовое выражение имеет значение false, цикл завершается.

Итак, для блок-схемы цикла

enter image description here

Во - первых, возьмите свой код в качестве примера:
#include <stdio.h>
int main(){
    for (printf ("3"); printf("2"); printf("1")) break;
    return 0;
}
Выход
32

1.инициализация-это "printf ("3")", затем распечатайте:

3

2.Тестовое выражение "printf("2")", это всегда верно, так что печатайте:

2

3.для петли тела "break", это означает завершение выполнения цикла for,

не выполняйте обновленное выражение "printf("1")"

кроме того, программа выскакивает из цикла for и переходит к "return 0;",

затем завершите выполнение этой программы.

Итак, результат таков

32
Во-вторых, возьмите свой измененный код в качестве примера:
#include <stdio.h>
int main(){
    for (printf ("3"); printf("2"); printf("1")) ;
    return 0;
}
Выход
321212121212121212...121212...1212...

Аналогично,

1.инициализация-это "printf ("3")", затем распечатайте:

3

2.Тестовое выражение "printf("2")", это всегда верно, так что печатайте:

2

3.для петли тела "`", пустой, затем ничего не делайте. перейти к обновленному выражению

"printf("1")"

4.обновленное выражение "printf("1")", затем распечатайте

1

5.затем перейдите к тестовому выражению "printf("2")", то есть " 2.Тест

выражение "printf("2")", это всегда верно, поэтому печатайте".Потому что

тело цикла "`",пустое, затем всегда переходит из обновленного

выражение "printf("1")"к тестовому выражению "printf("2")",

вот почему после печати "32"эта функция выводит бесконечный цикл

"12".И эта функция никогда не прекращает печать".12"если только ты

остановите эту функцию.

Итак, итак, итак, результат таков

32121212...121212...121212...
В-третьих, возьмите свой недавно измененный код в качестве примера:
#include <stdio.h>

int main()
{
    int a=1;
    for (printf ("3"); printf ("2"); printf ("1")) 

    return 0;
}
Выход
32

1.программа начинает запускаться с левой " {"функции main(),

это оператор инициализации временной переменной

"int a=1;".

Это утверждение определяет "int"типизированная временная переменная "a", и

устанавливает его значение равным "1", Но это ничего не печатает!

2.затем программа переходит к циклу for.

3.оператор инициализации "printf ("3")", затем распечатайте

"3",и

перейдем к тестовому выражению.

3

4.Тестовое выражение "printf("2")", это всегда верно, так что

печать "2", и перейдем к выражению тела для цикла.

2

5.выражение тела цикла for "return 0", выражение

"return 0"возвращение "0'к функции main () и завершите

выполнение main(), но ничего не печатает.

Итак, результат таков:

32
Конец, спасибо!
2021-11-24 07:01:53

На других языках

Эта страница на других языках

Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................