for循环多条语句注意事项

好久没有敲代码了,手都生了。记录一下自己今天复习C语言遇到的一个小问题。

问题背景:

编写一个程序,实现如下输出效果:

        Smile!Smile!Smile!

        Smile!Smile!

        Smile!

我写的代码是这样的:

#include
int smile(void);
int main(void)
{
	int i, j;
	i = 0;
	j = 0;

	for (i = 3; i >= 1; i--)
		
		for (j = i; j >= 1; j--)
			smile();
		printf("\n");

	return 0;

}

int smile(void)
{
	printf("Smile!");
	return 0;
}

本来还自信满满,觉得自己肯定会得到正确的结果,可结果让我大跌眼镜:

for循环多条语句注意事项_第1张图片

Why?明明看上去很对啊~于是不甘心的我又打断点查看程序详细运行步骤。不查不知道,一查吓一跳。我的printf("\n");在for循环过程中根本没有执行!!!只在最后执行了一次。

我这才如梦初醒,醍醐灌顶!当for循环的循环体中有多条语句时,要用花括号{}括起来。

于是,我的代码修改如下:

#include
int smile(void);
int main(void)
{
	int i, j;
	i = 0;
	j = 0;

	for (i = 3; i >= 1; i--)
	{	
		for (j = i; j >= 1; j--)
			smile();
		printf("\n");

	}

	return 0;

}

int smile(void)
{
	printf("Smile!");
	return 0;
}

终于这次结果正确了!!!

for循环多条语句注意事项_第2张图片


以下摘自百度百科:

for循环语法

1.语句最简形式为:

for( ; ; )

2.一般形式为:

for(单次表达式;条件表达式;末尾循环体)

{

中间循环体;

}

其中,表示式皆可以省略,但分号不可省略,因为“;”可以代表一个空语句,省略了之后语句减少,即为语句格式发生变化,则编译器不能识别而无法进行编译。

for循环小括号里第一个“;”号前为一个为不参与循环的单次表达式,其可作为某一变量的初始化赋值语句, 用来给循环控制变量赋初值; 也可用来计算其它与for循环无关但先于循环部分处理的一个表达式。

“;”号之间的条件表达式是一个关系表达式,其为循环的正式开端,当条件表达式成立时执行中间循环体。

执行的中间循环体可以为一个语句,也可以为多个语句,当中间循环体只有一个语句时,其大括号{}可以省略,执行完中间循环体后接着执行末尾循环体。

执行末尾循环体后将再次进行条件判断,若条件还成立,则继续重复上述循环,当条件不成立时则跳出当下for循环。


链接奉上:https://baike.baidu.com/item/for%E5%BE%AA%E7%8E%AF/5755435?fr=aladdin

你可能感兴趣的:(C语言学习,c语言)