打代码遇到一个无法解决的问题

#include<stdio.h>
#include<time.h>
#include<stdlib.h>
void guess_game(int a);
void draw_card(int a);
int rand_number(int a);
void choose_game(int a);
int main(void)
{
int what; //用于确定用户想玩什么游戏
printf("请你选择你想玩的游戏(0.退出程序1.猜数字,2.抽卡小游戏):");
scanf_s("%d",&what);
if (what == 0)
{
return 0;
}
choose_game(what);
}
/*猜数字小游戏(6.0版)
存在bug :

已修复BUG:
1.输入2无法退出程序
2.有大于10次猜的机会,会变化
3.输入1无法继续游戏
更改:
1.6.0将随机数分出去
*/
void guess_game(int a)
{
int frequency = 0, again, magic, guess, rand_num; //frequency为猜数字的次数, again用于确定是否再玩 , magic用户想猜数字的范围 rand_number为随机数, guess为用户猜的数字
printf("请输入你想猜数字的范围:");
scanf_s("%d",&rand_num);
magic = rand_number(rand_num);
printf("请猜一个数:");
scanf_s("%d",&guess);
do
{
frequency++; //每执行一次循环就加一,最多猜十次
if (guess < magic)
printf("小了,请重新猜:"),
scanf_s("%d", &guess);
else if (guess > magic)
printf("大了,请重新猜:"),
scanf_s("%d", &guess);
else if (guess == magic)
printf("恭喜你猜对了\n"),
frequency = 11; //4.0更改 //退出循环
else
printf("请输入有效数字"),
scanf_s("%d", &guess);
} while (frequency <= 10);
if (frequency > 10)
printf("game over\n"),
printf("是否重新开始(是请输入1,否输入2):"), //询问用户是否想再玩
scanf_s("%d",&again);
while (a)
{
if (again == 1) //1为想玩,2为不想玩
guess_game(1);
else if (again == 2)
break;
else
printf("请输入1或2:"),
scanf_s("%d",&again);
}
main();
}
//抽卡小游戏 (借鉴原神抽卡)
void draw_card(int a)
{
int how_much; //how_much:单抽还是十连
printf("单抽还是十连(1.单抽,2.十连):");
scanf_s("%d",&how_much);
}

//功能性函数

//随机数函数:随机生成一个函数
int rand_number(int a)
{
int b;
srand(time(NULL));
b = rand() % a + 1;
return b;
}

// 游戏选择
//通过用户输入的数字,确定游戏
void choose_game(int a)
{
switch (a)
{
case 0 :
break;
case 1 :
guess_game(1);
case 2 :
draw_card(1);
default:
printf("请输入有效数字:"),
scanf_s("%d",&a),
choose_game(a); //用递归法防止错误字符输入
}
}

上面是代码,

问题:玩过一次猜数字小游戏后退出会出亿点小问题(请忽略第二个小游戏),具体不好描述。

哪个C语言大佬帮我看看吧