前言:
学习c语言,学习来源b站鹏哥,37天吧应该是
内容:
这集内容挺多,源代码放到文章最后
题目是,使用函数编写一个随机数,然后自己猜,猜随机数
这里囊括了很多的知识点,理解起来有点吃力,写起来也很吃力,所以慢慢来,我不会奔溃的
首先利用了do while函数
这个函数的知识点,虽然只有一点点,但是合起来就有点麻烦,因为简单,所以没讲什么,
所以到用的时候,我就发现了一个问题,就是忘记了怎么写了
就是这个逻辑,do后面没有括号,然后就是while后面有括号
注意事项
do //每次循环都会执行do里面的语句
{
}
while()
{
}
然后函数可以嵌套一个函数,这也是非常常见的,大部分应该都支持嵌套
嵌套一个switch函数,这个是选择语句,输入一个值,看条件是否成立,这也是之前学的,全都用到了
switch("接受一个变量"),这个函数需要接收变量,然后进入循环,看这个变量对应循环的哪个判断语句,都不相等,则进入default,相当于if else的else
接收一个变量,但是输入0的话,才会退出程序,这应该是判断语句的
switch("变量")
{case 1: //这里的1就对应变量switch括号里接收的值{printf("xxx"); //我记得执行一条语句不需要加大括号,但是这好像是两条,不管了break; //发现了,老师也没加括号,这个应该不要加大括号}case2:{printf("xxx");break;}default:{printf("xxx");break;}}
运用到了void函数的无返回值,我之前稍微写了一下,对void稍微晓得一点,就是不用在函数里有输入return 0;这些,可以在函数里调用,然后就可以了,相当于一个功能点的样子
接下来编写随机值的函数,就是程序的主要部分
rand()函数,生成随机数的函数,但是这是伪随机数,就是说每次生成随机数的都是固定的,所以要配合时间戳,来实现时间戳的真随机,来实现函数的生成的真随机数
这个需要注意的是,就是头文件,就相当于实现一个功能需要的文件吧
rand函数的随机数的范围是
0~RAND_MAX(32767)
rand函数需要这个头文件
#include <stdlib.h>
void menu()
{printf("***********************\n");printf("********猜数字游戏******\n");printf("********play 1********\n"); printf("********exit 0********\n");
}void game()
{int ret = rand(); //生成一个随机数,用一个变量接收 printf("%d\n", ret);
}
但是这样子不能实现数字的真随机生成,需要配合rand函数的另一个功能
srand(),接受一个整型的变量,就是这里面的数字是随机的,那rand生成的数字就是随机的,很像套娃,对了,就是,但是这里的随机数可以用时间来代替,因为时间是唯一的,也都是整型,就可以实现随机数的生成
这段代码还是有错误的,因为我就是他随机值还是固定的,就是说有一个时间戳没有搞好
void game()
{//1、生成随机数//0~99 --> 1~ 100int ret = rand()%100 +1;while(1){printf("请输入数字:>");scanf("%d", &guess);if (guess < ret){printf("太小了\n"); }else if(guess > ret){printf("太大了\n");}else{printf("恭喜你猜对了\n");}} }
不知道这个为啥会输入在主函数里面
srand((unsigned int)time(NULL));
然后我试了一下放到game的函数里面,如果我刷新过快的,他的两个随机值是相同的情况
和老师讲的情况是一样的,但是我忘记老师说的为啥了,应该是放主函数更新速度快一点?
这个应该就是调用时间戳来实现,真正的随机数生成,应该就是rand函数的功能里的
实现代码
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
//电脑产生一个随机数(1-100)
//猜数字
//猜大了
//猜小了void menu()
{printf("***********************\n");printf("********猜数字游戏******\n");printf("********play 1********\n"); printf("********exit 0********\n");
}void game()
{int guess = 0; //1、生成随机数//0~99 --> 1~ 100int ret = rand()%100 +1;while(1){printf("请输入数字:>");scanf("%d", &guess);if (guess < ret){printf("太小了\n"); }else if(guess > ret){printf("太大了\n");}else{printf("恭喜你猜对了\n");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("退出程序\n");break; }default:{printf("选择错误,请重新选择!\n");break;}}}while(input);return 0;}