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 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥15 想问一下树莓派接上显示屏后出现如图所示画面,是什么问题导致的
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)
  • ¥100 set_link_state
  • ¥15 虚幻5 UE美术毛发渲染
  • ¥15 CVRP 图论 物流运输优化