这个bug出现在哪,是逻辑顺序还是函数上
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int random(int min,int max)
{
int r;
do{ r=rand()%(max-min+1)+min;
}while(r==3||(r<=9&&r>=6)||r==12);
return r;
}
void toBinary(int m)
{
int N,b=8;
while(b!=0)
{
N=m&b;
if(N!=0)
printf("1");
else
printf("0");
b>>=1;
}printf("\n");
}
int judge(int M,int i)
{
int x=M,y;
x<<=(4-i);
x=x&8,y=M&8;
if(x^y==0)
return 1;
else
return 0;
}
int move(int M,int i)
{
int b=1;
b<<=(i-1);
b=b|8;
M=M^b;
return M;
}
int main()
{
int M,N,b,k,n; char ch[3][8]={"白菜","羊","狼"},ch1[2][8]={"不在","在"},ch2='y',ch3;
srand(time(NULL));
M=random(0,15);
printf("M初始状态十进制表示:%d\nM初始状态二进制表示:",M);
toBinary(M);
while(ch2=='y'){k=rand()%3+1;
n=judge(M,k);
printf("k=%d 农夫和%s%s同岸\n",k,ch[k-1],ch1[n]);
if(n==1)
{
printf("农夫将%s移动到对岸后状态:",ch[k-1]);
M=move(M,k);
toBinary(M);
}
printf("还要继续么?\n");
ch2=getchar(),ch3=getchar();}
return 0;
}
有bug的
回答不易,回答有用请你采纳,点击回答右侧采纳即可!
这个代码中的 bug 出现在主函数的 while 循环中。在这里,ch2 变量用来判断是否要继续执行循环,但是在读取 ch2 的值时使用了两个 getchar() 函数,第二个 getchar() 会读入回车符,导致该循环一直执行下去。这是程序的 bug。
要修复这个 bug,应该在读取 ch2 的值时使用一个 scanf() 函数,并将其设置为只读取一个字符,如下所示:
scanf("%c", &ch2);
这样可以避免读入回车符,从而解决循环一直执行的问题。
另外,在本代码中,使用了 srand(time(NULL)) 函数来初始化随机数生成器。在多次运行程序时,这样做可能会导致程序每次运行的随机数都相同。因此,建议在 main 函数的开头增加srand(time(NULL))
这样就可以保证每次运行程序时生成的随机数都不同。