Может ли кто-нибудь объяснить мне, почему он печатает 32 и общую концепцию того, как это работает?
#include <stdio.h>
int main()
{
int a=1;
for (printf ("3"); printf ("2"); printf ("1"))
return 0;
}
Может ли кто-нибудь объяснить мне, почему он печатает 32 и общую концепцию того, как это работает?
#include <stdio.h>
int main()
{
int a=1;
for (printf ("3"); printf ("2"); printf ("1"))
return 0;
}
Правильный отступ сделает его более четким:
#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
. И мы не получаем никакого повторения чего бы то ни было.
Вы знаете, что программа начинает выполняться слева " {"функции main(), заканчивается справа"} " функции main(), если нет бесконечного цикла.
Как показывает ваш код, ваша трудность состоит в том, чтобы понять блок-схему цикла for на языке Си.
for (initializationStatement; testExpression; updateStatement)
{
// statements inside the body of loop
for loop body;
}
1.Оператор инициализации выполняется только один раз.
2.Затем вычисляется тестовое выражение. Если тестовое выражение оценивается как ложное, цикл for завершается.
3.Однако, если тестовое выражение оценивается как истинное, выполняются операторы внутри тела цикла for и обновляется выражение update.
4.Снова вычисляется тестовое выражение.
Этот процесс продолжается до тех пор, пока тестовое выражение не станет ложным. Когда тестовое выражение имеет значение false, цикл завершается.
#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