void except1() { time_t Time=time(NULL); drawTheGameBox(); int num_rand_1,num_rand_2,n,y=3,x=26; srand(time(NULL)); for(int i=0;i<18;i++) { gotoxy(25,y+=1); num_rand_1=rand()%4; num_rand_2=rand()%4; printf("%2d/%2d=",num_rand_1,num_rand_2); scanf("%d",&n); if(n==num_rand_1/num_rand_2) { gotoxy(65,y); n++; sorce+=10; printf("答对啦!"); gotoxy(x+=1,22); printf("★"); drawTheGameBox(); }else{ gotoxy(65,y); printf("答错啦,继续加油!"); drawTheGameBox(); } }改良上述代码并修复其中可能出现的bug
时间: 2024-03-18 17:39:49 浏览: 55
在这段代码中可能出现的 bug 有:
1. 除数可能为 0,导致程序崩溃;
2. 没有清空输入缓冲区,可能导致后续输入错误;
3. 没有处理输入非法字符的情况,可能导致程序崩溃或输出错误的结果;
4. 没有恰当地使用 srand 函数,可能导致生成的随机数不够随机。
改良代码如下:
```c
void except1() {
time_t Time = time(NULL);
drawTheGameBox();
int num_rand_1, num_rand_2, n, y = 3, x = 26;
srand((unsigned int) Time); // 使用时间作为随机数种子
for (int i = 0; i < 18; i++) {
gotoxy(25, y += 1);
num_rand_2 = rand() % 4 + 1; // 除数不为 0
num_rand_1 = rand() % (num_rand_2 * 4); // 随机生成一个小于等于 num_rand_2 * 4 的被除数
printf("%2d/%2d=", num_rand_1, num_rand_2);
fflush(stdin); // 清空输入缓冲区
while (scanf("%d", &n) != 1) { // 处理非法字符
printf("输入错误,请重新输入:");
fflush(stdin);
}
if (n == num_rand_1 / num_rand_2) {
gotoxy(65, y);
n++;
sorce += 10;
printf("答对啦!");
gotoxy(x += 1, 22);
printf("★");
drawTheGameBox();
} else {
gotoxy(65, y);
printf("答错啦,继续加油!");
drawTheGameBox();
}
}
}
```
上述改良代码解决了上述可能出现的 bug,增加了输入非法字符和随机数生成的处理,使程序更加健壮和稳定。
阅读全文