Advertisement

[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;
    }
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    

运行结果
在这里插入图片描述

全部评论 (0)

还没有任何评论哟~