m0_74128289 2023-01-25 19:55 采纳率: 87.5%
浏览 27
已结题

农夫过河bug如何修改,原问题在下方图片

这个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的

img


问题

img


正确的

img

  • 写回答

1条回答 默认 最新

  • 社区专家-Monster-XH 2023-01-25 20:26
    关注

    回答不易,回答有用请你采纳,点击回答右侧采纳即可!
    这个代码中的 bug 出现在主函数的 while 循环中。在这里,ch2 变量用来判断是否要继续执行循环,但是在读取 ch2 的值时使用了两个 getchar() 函数,第二个 getchar() 会读入回车符,导致该循环一直执行下去。这是程序的 bug。
    要修复这个 bug,应该在读取 ch2 的值时使用一个 scanf() 函数,并将其设置为只读取一个字符,如下所示:

    scanf("%c", &ch2);

    这样可以避免读入回车符,从而解决循环一直执行的问题。

    另外,在本代码中,使用了 srand(time(NULL)) 函数来初始化随机数生成器。在多次运行程序时,这样做可能会导致程序每次运行的随机数都相同。因此,建议在 main 函数的开头增加srand(time(NULL))

    这样就可以保证每次运行程序时生成的随机数都不同。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 2月3日
  • 已采纳回答 1月26日
  • 修改了问题 1月25日
  • 修改了问题 1月25日
  • 展开全部

悬赏问题

  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上