if语句
主要是if()语句对括号内进行判断,判断其为0(假)或是除0以外数字(真)
int main()
{
int x=6;
if (x)
Log("it is true");
}
if(),括号内为真,所以执行Log函数,打印出it is true
int main()
{
int x=6;
if (0)
Log("it is false");
}
if(),括号内为假,所以执行Log函数,打印出it is false
if语句常常搭配else
if()判断为假才执行else后语句
int main()
{
int x=6;
if (x)
Log("it is true");
else
Log("it is false");
}
调试台
it is true
if语句为真,那么编译器将忽略掉else与对应的Log函数也就是执行到第五行紧接着跳转到第八行。if语句为假时,才转到else并执行响应Log函数也就是执行到第四行if()紧接着跳转到第七行。
从中我们可以看到那些行执行那些行未执行。
还有一件事,我们不要将四五行写在一起,虽然if语句在只有一行执行语句下可以进行,不写花括号、Log与if并列。但是我们尽量还是不要将if与Log写在同一行,花括号可以省略。因为你写在一行时在此处打断点,你会分不清楚断点停在if()选择上还是Log语句上,对debug带来不必要的麻烦。
int mian()
{
int x = 6;
if(x)
Log("it is true")
else if(x == 6)
Log("it is 6")
else
Log("it is false")
}
在上述例子中,你可以想一想最后打印出来的是什么?
it is true
it is 6
真的是这样吗?
我们可以将else if分解
int mian()
{
int x = 6;
if(x)
Log("it is true")
else
{
if(x == 6)
Log("it is 6")
}
else
Log("it is false")
}
if()判断为假才执行else后语句
我们可以看到if为真,所以两个else都不执行。调试台输出为
it is true
如果就是想要判断输出设是不是等于6,怎么改写?
将else if改写成if即可,调试台输出
it is true
it is 6
还有一件事,if语句在编程时开销很大,所以逐渐熟悉之后减少使用if语句会让你的代码更快。
循环语句
if语句解决了,选择性的问题,在什么时候去做a在什么时候去做b。
循环语句解决什么呢?
当你想将某些文字重复打印10次时,你可以将其复制十次放到一个函数后输出,那如果我要循环100次呢,反复地复制是不是很烦,所以循环语句出现了。
for循环
int main ()
{
for (int i = 0;i<10;i++)
{
Log("hello");
}
}
for的括号内分为三个部分,一是申明部分我们给i赋值为0,二是条件部分我们使其小于10,也就是循环十次,三是程序执行完Log函数后执行i++,i变为1,其继续与第二部分的条件比较,满足则继续循,循环式十次后即会退出。
我们还可以将格式转变下
int main ()
{
int i = 0
for (;i<10;)
{
Log("hello");
i++;
}
}
这里的执行效果都是打印十次hello,我们可以更加清晰看到for括号内三部分的执行顺序。
while循环
int main ()
{
int i = 0;
while(i<10)
{
Log("hello");
i++;
}
}
emmmmm这么一看while循环与for循环使用结果上看都是打印十次hello。
什么时候用for什么时候用while呢?
没有要求,全看个人习惯。不过在某些场景下你就会看出选择for好还是while好。
制作一款游戏,我们如果不使用循环就只会渲染一帧画面,加入循环我们就可以做到只要用户不退出就一直渲染,在这个需求下我们用for还是while呢?
int main ()
{
int running = 1;
while(running)
{
Log("hello");
}
}
对于while函数我们可以做到以上表达,只要用户不退出我们running就为1,就一直执行Log渲染程序。当用户退出时running置为0,我们就退出循环不在渲染。
对于某些具有次数要求的程序时我们更常用for,比如数组的偏移量0 1 2 3正好对应着for循环的0 1 2 3。这时候我们更加关注的是每次的变化我们就选择for语句。
do while循环使用少,自行了解吧。
============================24.7.22========================================
控制流语句
continue break return
控制流语句搭配循环语句可以做的,在某某条件下从循环中跳出。
continue
continue只被用在循环语句中,执行到continue时跳出,执行下一次迭代。
int main ()
{
for (int i = 0;i<10;i++)
{
if(i%2 == 0)
continue;
Log("hello");
std::cout<<i<<std::endl;
}
}
我们已经知道不加if语句的for循环函数迭代了10次,i值从0到9
加入if语句后由于continue的存在当满足(i%2==0)i=0、2、4、6、8时进行下次迭代,意味着跳过了i=0、2、4、6、8时对应的Log函数与打印i值。
调试台打印为
hello
1
hello
3
hello
5
hello
7
hello
9
所以,我们知道continue是跳入下一次迭代中。
break
break 常用在switch语句中,跳出循环。
int main ()
{
for (int i = 0;i<10;i++)
{
if(i%2 == 0)
break;
Log("hello");
std::cout<<i<<std::endl;
}
}
我们将continue替换为break,运行后发现调试台什么都没打印,这是为什么?
原因是i=0,if语句为真,执行break,break跳出循环函数,跳到第十行
int main ()
{
for (int i = 0;i<10;i++)
{
if((i+1)%2 == 0)
break;
Log("hello");
std::cout<<i<<std::endl;
}
}
按照以上更改,当i=1/3/5/7/9时if语句判定为真,会执行其下的条件语句。但是,由于break的存在i=1时会直接跳出循环。跳到第十行
调试台打印
hello
0
return
return 返回一个数值,必须返回点什么东西。如果函数名前是void可以不写return
int main ()
{
for (int i = 0;i<10;i++)
{
if((i+1)%2 == 0)
return 0;
Log("hello");
std::cout<<i<<std::endl;
}
}
将break替换成return 0;你会发现调试台打印为
hello
0
看起来与break代码一致,但是当i=1运行到break时,跳到第十一行,意味着main函数结束。
如果for循环之后还有函数,也会一并跳过。
return并非是专门应用于循环之中,它哪里都可以去。