2.switch语句:
switch语句也是一种分支语句,常常用于多分支的情况。
语法结构:
switch (整型表达式)
{
case 整型常量表达式: // case相当于入口
语句;
break; // break相当于出口
case 整型常量表达式: // case相当于入口
语句;
break; // break相当于出口
case 整型常量表达式: // case相当于入口
语句;
break; // break相当于出口
......
}
//switch语句 #include <stdio.h> int main() { int day = 0; scanf("%d", &day); switch (day) // 得输入整型表达式 { case 1: // case后写整形常量表达式 printf("星期一\n"); //语句 break; // 如果进入对应的case语句的话,退出switch语句, // 否则之后的case语句也会被执行 case 2: printf("星期二\n"); break; case 3: printf("星期三\n"); break; case 4: printf("星期四\n"); break; case 5: printf("星期五\n"); break; case 6: printf("星期六\n"); break; case 7: printf("星期七\n"); break; } return 0; }
default子句(设置输出超过case的情况下的操作方法):
//switch语句 #include <stdio.h> int main() { int day = 0; scanf("%d", &day); switch (day) // 得输入整型表达式 { case 1: // case后写整形常量表达式 printf("星期一\n"); //语句 break; // 如果进入对应的case语句的话,退出switch语句, // 否则之后的case语句也会被执行 case 2: printf("星期二\n"); break; case 3: printf("星期三\n"); break; case 4: printf("星期四\n"); break; case 5: printf("星期五\n"); break; case 6: printf("星期六\n"); break; case 7: printf("星期七\n"); break; default: printf("输入错误"); break; } return 0; }
(default不用非得放在switch的最后)
(switch也允许嵌套使用,break只会跳出一层switch)
补充:
1. 星期一 ~ 星期五打印"weekday",星期六 ~ 星期日打印”weekend“:多个case实现同一效果(不用巧用break)
//巧用break #include <stdio.h> int main() { int day = 0; scanf("%d", &day); switch (day) { case 1: case 2: case 3: case 4: case 5: printf("weekday\n"); break; case 6: case 7: printf("weekend\n"); break; } return 0; }
(在每个switch语句中都放一条default子句是个好习惯,甚至可以在后边再加一个break)
二.循环语句 (循环结构):
1.while循环语句:
while - 语法格式:
while (表达式)
{
......
循环语句;
}
(循环语句执行完后,再判定表达式,若成立,再进入while循环)
//while循环 #include <stdio.h> int main() { int n = 1; //使用while循环打印 1~10 while ( n <= 10 ) { printf("%d ", n); n++; } return 0; }
补充:
1. while循环语句中的 break:嵌套if语句再利用break来(跳出)终止循环
(在循环中只要遇到break,就停止后期的所有的循环、直接终止循环,
所以:while中的break是用于永久终止循环的。)
//while循环 #include <stdio.h> int main() { int n = 1; //使用break终止while循环 while (n <= 10) { if (n == 5) { break; } printf("%d ", n); n++; } return 0; }
2. while循环语句中的 continue:跳过本次循环continue后边的代码,直接去while循环的判断部分
(continue是用于终止本次循环的,就是本次循环中continue后边的代码不会再执行,
而是直接跳转到while语句的判断部分,进行下一次循环的入口判断
多层循环中,只会跳出内层循环,一次只能跳出一层循环。)
//while循环 #include <stdio.h> int main() { int n = 1; //使用continue跳过循环中continue后面的语句 while (n <= 10) { if (n == 5) { continue; } printf("%d ", n); n++; } return 0; }
3.利用while和getchar()函数来实现多组输入
*getchar()函数 和 putchar()函数:
//getchar() 和 putchar() #include <stdio.h> int main() { // getchar()函数:接收一个字符 // 如果接收失败的话,会返回EOF(即-1), // 所以,该函数的返回类型是 int, // 接收该函数返回值的变量也应该是int // 因为字符本质是ASCii码,所以也可以接收字符 int ch = getchar(); // 跟getchar对应的还有putchar // putchar()函数:打印字符,只能打印字符 putchar(ch); return 0; }
*实现多组输入:
//getchar()实现多组输入; #include <stdio.h> int main() { int ch = 0; // EOF - end of file - 文件结束标志 // #define EOF (-1) // 在函数读取失败的时候返回了 EOF // 之前介绍过利用 scanf函数 来实现多组输入 // scanf 函数读取成功,返回的是读取到的数据的个数 // 读取失败返回 EOF // // getchar 读取成功返回字符的ASCII码值 // 读取失败返回EOF // 回车也会读取,先读输入的字符,在读回车 // // ctrl + Z - 会让 scanf 或者 getchar 返回 EOF while ( (ch = getchar()) != EOF ) { putchar( ch ); } return 0; }
4.利用while和getchar清空缓冲区:
(getchar方法取走\n‘回车’)重点!!
#include <stdio.h> int main() { //密码:123456 char password[20] = { 0 }; printf("请输入密码:>"); scanf("%s", password); // 数组本身就是地址,所以这里不用加&(取地址符)重点!! printf("请确认密码(Y/N):"); char input = 0; getchar(); // 把键盘输入的 \n(回车) 取走 scanf("%c", &input); // 因为input是变量,所以要加&(取地址符) if ('Y' == input) { printf("确认成功\n"); } else { printf("确认失败\n"); } return 0; }
(出问题)
*getchar方法循环取走\n‘回车’(清空缓冲区):
#include <stdio.h> int main() { //密码:123456 char password[20] = { 0 }; printf("请输入密码:>"); scanf("%s", password); // 数组本身就是地址,所以这里不用加&(取地址符)重点!! printf("请确认密码(Y/N):"); char input = 0; //getchar(); // 把键盘输入的 \n(回车) 取走 //清理掉缓冲区中剩余的数据 while ( getchar() != '\n' )//循环直到取走\n(回车)为止 { ; } scanf("%c", &input); // 因为input是变量,所以要加&(取地址符) if ('Y' == input) { printf("确认成功\n"); } else { printf("确认失败\n"); } return 0; }
2.for循环语句:
3.do while循环语句:
三.转向语句:
1.break转向语句:
多用于switch语句,和循环语句,进入对应case语句后,执行到case里的break跳出switch循环,防止再执行该case语句以下的case语句。在switch语句中,我们没办法直接实现分支,搭配break使用才能实现真正的分支。
在循环中只要遇到break,就停止后期的所有的循环、直接终止循环。
2.goto转向语句:(遇到再说明)
3.continue转向语句:
在循环中,continue是用于终止本次循环的,就是本次循环中continue后边的代码不会再执行,而是直接跳转到while语句的判断部分,进行下一次循环的入口判断。
多层循环中,只会跳出内层循环,一次只能跳出一层循环。
4.return转向语句:
返回一个值,可以使用返回的值,平常写的main方法里就经常使用,因为main方法前面的返回类型是int,所以在main方法的代码块的最后总会写上 "return 0"。
可以在自定义的函数中使用 retuan 语句,当在主方法中调用该函数时,使用这个返回的值。
return会结束整个main函数(主程序)。