1.if
逻辑:程序中某一段代码需要满足一定的条件才会被执行
语法:
if 语句: 表达一种 , 如果条件满足 则 执行某个代码块
if-else 语句: 表达一种 ,如果 条将满足则执行某个代码块 否则执行另外一个代码块
//编程常用
#if 1
/*代码块一*/
#else
/*代码块二*/
#endif
2.switch
逻辑:根据不同的条件来执行不同的代码块
语法:
int num = 0 ;
printf("请你来几拳!!!\n");
scanf("%d" , &num);
while(getchar() != '\n'); // 清空标准输入缓冲区
switch ( num ) {
case 1 :
printf("它一个左勾拳!!\n") ;
break ;
case 2 :
printf("它一个左勾拳和一个右鞭腿!!\n") ;
break ;
case 3 :
printf("一个不小心打我脸上了!!!!!\n") ;
break ;
default :
printf("它怂了!! !!!\n") ;
}
注意:
①switch(num )语句中的num , 它必须是一个整型的表达式,也就是所switch只能判断整型的数据
②case 语句中的 必须是整型常量,包括普通的字符。不包括被const修改的整型数据
③break 用来中断/跳出当前的循环。如果没有则会从条件满足的语句开始一条一条的往下执行,直到整个switch - case 结束或者遇到其它代码块中的break
④default 并不是必须存在,它一般放在最后面,用来提示用户表示都不满足以上条件。由于在最后面可以不添加break
3.while和do…while
逻辑:使得程序中某一端代码块重复循环执行。
while(num) // 非零则真 (布尔值)
{
printf("num:%d\n" , num-- );
}
do
{
printf("num:%d\n" , num-- );
} while (num);
注意:
①while 循环先进行判断而且条件为真,然后再执行代码块(有可能一次都不执行)
②do … while 则是先执行一次代码块 ,然后再判断条件是否成立(最少会执行一次代码块)
③while(num); --> 空循环 这个分号要慎重
④do… while(num) ; 这个分号不能丢
4.for循环
逻辑: 与while 类似, 都是让程序中某一段代码块重复运行,但是for相对与while来说更加紧凑。把所有的循环控制都集中到一行代码中
for (size_t i = 0; i < num ; ++i)
{
printf("i:%ld\n" , i );
}
for (;;) // 相当与 while(1)死循环
{
printf("i:%d\n" , i );
}
注意:
① 初始化语句只会被执行一次
②第三个表达式 ++i 再第一次循环的时候并没有被执行
③第三个表达式中 前缀/后缀 并不影响 i 再循环中取值的先后
④for 循环语句中 ,三个表达式都可以省略,但是分号必须留下
⑤for 循环语句中 , 三个表达式中间用分号来隔开 ;
⑥在for循环中直接定义并初始化只在C99的编译规则下可以这么干, 所以可以添加
5.break与continue
break: 跳出循环结构 / 跳出当前层的循环
continue : 结束当前这一次循环,重新进入下一次的循环
for (int i = 0 ; i < num ; ++i )
{
while(1) // 在 循环体内部可以嵌套其它的循环
{
printf("你打我呀!!\n");
break; // 跳出while这一层循环, 并不影响外面的for
}
if (i == 5)
{
continue ; // 跳过当前这一次循环, 导致后面的代码在当次循环中不执行
}
printf("i:%d\n" , i );
}
6.goto语句
逻辑: 无条件跳转
int main(int argc, char const *argv[])
{
int num = 0 ;
printf("请你来几拳!!!\n");
scanf("%d" , &num);
while(getchar() != '\n'); // 清空标准输入缓冲区
for (int i = 0 ; i < num ; ++i )
{
goto A; // 无条件跳转到标签为 Even 的位置
}
A:
printf("这里是标签的位置!!!\n");
return 0;
}
注意:
① 标签后面有个冒号:
② goto 语句是一个无条件跳转的语句, 不利于程序的可读性,一般不建议使用
③ goto 语句一般出现在驱动比较多, 用来处理严重的错误,并退出