越来越难了,还是得先补一下从语言才行,有点语言基础学arduino会轻松一点,小白避坑指南啊
一、If else 语句
接着上次的博文,对if else语句一知半解的讲述,来谢罪了
1.1基本用法
首先,简单介绍一下 if else 语句的书写格式:
if (条件语句)
{
满足条件后的执行内容;
}(//这里写入执行语句,在这里加上个大括号也算是一个好习惯)
else(条件语句)
{
满足条件语句后的执行内容;
}
1.2多分支与嵌套
if else 语句也支持多分支食用,拿老师喜欢的age来举例:
int age =0;
if(age<=18)
{
printf("少年\n");
}
else if (age<=25)
{
printf("青年\n");
}
else
{
printf("壮年\n");
}
上面是普通写法
这样的话就是一个三分支的句例
嵌套如下:
int age =0;
if(age<=18)
{
if (age<=10 )
{
printf ("幼年\n")
}; <--注意:此处就进行了 if 语句的嵌套使用。
else
{
printf ("少年\n");
}
}
else if (age<=25)
{
printf ("青年\n");
}
else
{
printf ("壮年\n");
}
1.3 使用过程中几个需特别注意的点
比如,在条件语句中需描述 a 的值要大于等于1且小于等于2时
大部分小萌新们会将数学语言直接照搬到条件语句中,
错误示例
if(1=<a<=2)
1
长期以来数学语言的熏陶下,这种根深蒂固的惯性思维也将使我们困扰许久。于是在这里便和大家分享此题正解:
正确示例
if (a>=1&&a<=2)ps:此处的 && 是逻辑”与“符号,在这块就表示并且、和
1
还有一些需要注意的点!!
1.3.1 关于经常把赋值符号 “=" 与 等于 ”== “ 弄混的小秘招
相信很多小伙伴也和我一眼在这里容易弄混,例如一个程序;问你是否喜欢蓝色(1 Yes / 2 No)
输入 1 就在屏幕上打印 ”喜欢“
而输入 2 就在屏幕上打印”不喜欢“
接下来我们来实现这个函数
常见错误示范:
#include<stdio.h>
int main()
{ int a=0;
scanf("%d",&a);
if(a=1)
{
printf(" 是的\n");
}
else
printf("不喜欢\n");
return 0;
)
你会发现不管是输入 1 还是 2 输出的结果都为 ”喜欢“。
编译器也不会给你报任何错误,那么其实这就是走入了 赋值符号 “=" 与 等于 ”== “ 弄混 的这个误区,对于这种一个常量和变量进行对比的条件语句
我们可以在写的时候将常量与变量的位置互换一下
if(1==a)
1
这样一来即使你不小心将两个符号混乱使用了,也能够即使发现错误(因为如果此处写成了赋值的符号,变量在右边,常量在左边,变量是不能给常量赋值的,产生了语法错误,此时编译器会报错。这样一来就将逻辑错误转换成了语法错误。
并且前后对调位置后对程序运行的结果是不会有影响的
1.3.2 "悬空 else "易错的问题
#include<stdio.h>
int main()
{
int a = 0;
int b = 2;if(1==a)//用到上面的方法,避免出错
if(2==b)
{
printf("yes\n");
}
else
{
printf("no\n");
}
return 0;
}
错误就在这里,这样的话什么都不输出。
是因为 else 会与最近的一条 if 语句相匹配,而不是与位置上对齐的 if 语句相匹配。
经过前面对 if else语句的学习,我们简单分析一下这串代码,首先走到第一个 if 的条件语句判断 a是否等于1,
如果等于程序才走后面的一套 if else 语句(注意后面的if else语句虽然中间有两个分号但本质上两个合起来才算组成一条语句,且因为if else是选择执行一个的,所以必然是一条)。
而很明显不满足第一个 if 的判断语句,所以后面的无论是 yes/no,就算符合条件了也根本不会输出,因为程序都不会走过去。这就造成了所谓的 "悬空else" 的情况。
要使所有控件路径都有返回值
简单来说就是在使用分支语句时要使所有分支都有返回值,否则编译器将会发出警告.
如果你只写了 if 的返回值情况,没在其他情况下设置返回值,编译器就会认为在 if 语句不满足时该函数没有返回值。,因为编译器要求在 if 不符合的情况下也得有相应返回值。
在Arduino IDE中编程也是这样的道理,希望到家都少走弯路,不断进步。