[c语言]分支和循环(猜数字游戏)
文章目录
-
分支
-
- if分支语句
- switch 分支语句
-
循环
-
- while
- for
- do...while
-
猜数字游戏
分支
if分支语句
if(表达式)
语句;
else
语句2;
if(表达式)
{
语句1;
}
else if(表达式)
{
语句2;
}
else
{
语句3;
}
表达式为真,执行语句
c语言中,0为假,非0为真
else和最近的if 相匹配
switch 分支语句
常用于多分支
switch(整型表达式)
{
case (整型常量表达式) :
语句;
break;//跳出
default://默认,所有case不能匹配的跳到这
}
break 非常重要,没有break语句会一直向下执行
#include<stdio.h>
int main()
{
int month = 0;
scanf("%d", &month);
switch (month)
{
case 1:
printf("一月");
break;
case 2:
printf("二月");
break;
case 3:
printf("三月");
break;
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
case 10:
case 11:
case 12:
printf("其他");
break;
default:
printf("输入错误!");
break;
}
return 0;
}



循环
while
while(表达式)
{
循环语句;
}
表达式为真,执行循环语句
否则不执行
break:在while循环中,break用于永久的终止循环
continue:在while循环中,continue用于跳出本次循环,直接去判断部分看是否进入下一次循环
#include<stdio.h>
int main()
{
char password[20] = {0};
printf("请输入密码<");
scanf("%s", password);
//getchar()清理缓冲区中的'\n'
//getchar();
//清理缓冲区中的多个字符
int tem = 0;
while (tem=getchar() != '\n')
{
;
}
printf("请确认密码:Y/N\n");
if (getchar() == 'Y')
printf("密码正确");
else
printf("密码不正确");
return 0;
}
从键盘输入到缓冲区,getchar从缓冲区中读取字符,在输入密码12345后回车,缓冲区中:12345\n,所以需清除缓冲区中的\n ,用getchar读取\n,此时缓冲区是空的,不影响下一个字符的读取,否则无法读取到键盘输入的Y/N
如果输入的密码是12345 abcd,此时缓冲区:12345 abcd\n ,不能用getchar 读取到多个字符,但用一个while语句使得多个字符被读取,清除了缓冲区
for
(初始化; 判断 ; 调整语句)
for(表达式1;表达式2;表达式3)
{
循环体;
}
先执行表达式1进行初始化,再执行表达式2进行判断,如果为真,执行循环体,最后再执行表达式3;一直循环,直到表达式2为假结束。

在for循环中,break永久终止循环
continue中止本次循环,跳转到调整部分
do…while
do
{
循环语句;
}while(表达式);
先执行,再判断,如果为真,继续执行循环,直到表达式不成立为止。
特点:至少循环一次
猜数字游戏
1.自动产生一个1—100的随机数
2.猜数字:猜对了,恭喜你,游戏结束;
猜错了,会告诉你,猜大了还是猜小了,再继续猜,直到猜对
3.游戏可以一直玩,除非退出游戏
#include<stdio.h>
void menu() {
printf("*******************\n");
printf("**** 1.play *****\n");
printf("**** 0.exit *****\n");
printf("*******************\n");
}
void game() {
//1.生成随机数
int red = rand()%100+1;
//2.猜数字
printf("请猜数字\n");
while (1)
{
int guess = 0;
scanf("%d", &guess);
if (guess > red)
printf("猜大了");
else if (guess < red)
printf("猜小了");
else
{
printf("恭喜你,猜对了");
break;
}
}
}
int main()
{
int input = 0;
srand((unsigned int) time (NULL));//时间戳转换随机数
do
{
menu();
printf("请选择>>");
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;
case 0:
printf("退出游戏");
break;
default:
printf("输入错误,请重新输入");
break;
}
} while (input);
return 0;
}
运行结果

