Loops 我的代码错了吗?

Loops 我的代码错了吗?,loops,structure,conditional-statements,Loops,Structure,Conditional Statements,我对编码非常陌生,我正在自学C语言 我正在做我的第一个练习,我要创造一个“游戏”(“或多或少”),其概念是: -计算机选择一个介于和1到100之间的随机数 -我们得猜猜 -当你找到神秘数字时,游戏结束 我设置了函数循环(do..while)和函数(if..else),即使你没有找到神秘数字(除非你找到!) 有几天我一直在处理我的代码,因为当我调试时,什么都没有发生(所以这是一个非常好的消息)但是当我运行时也什么都没有发生 我的代码是: int main( int argc, char*argv[

我对编码非常陌生,我正在自学C语言

我正在做我的第一个练习,我要创造一个“游戏”(“或多或少”),其概念是:

-计算机选择一个介于和1到100之间的随机数

-我们得猜猜

-当你找到神秘数字时,游戏结束

我设置了函数循环(do..while)和函数(if..else),即使你没有找到神秘数字(除非你找到!)

有几天我一直在处理我的代码,因为当我调试时,什么都没有发生(所以这是一个非常好的消息)但是当我运行时也什么都没有发生

我的代码是:

int main( int argc, char*argv[])

{

    int numberYouChoose = 0;
    int MysteryNumber = 0;
    const int MAX = 100, MIN = 1;


    printf("What's the number?\n");
    scanf("%d", &numberYouChoose);

 srand(time(NULL));
MysteryNumber = (rand() % (MAX - MIN + 1)) + MIN;


do{

    printf("Boooooh Try again!");
}while(numberYouChoose != MysteryNumber);

if (numberYouChoose == MysteryNumber);
 printf("Yay you found it!\n");


    return 0;
}

像电脑一样思考,一步一步走。。。你要求一个号码,但你再也不要求它,所以它将永远卡在你的do中。每次用户失败时,您都需要询问。将您的
Do while
更改为简单的
while

while (numberYouChoose != MysteryNumber) {
    printf("Boooooh Try again!\n");
    printf("What's the number?\n");
    scanf_s("%d", &numberYouChoose);
}

printf("Yay you found it!\n");
编辑:

这是多余的,当用户键入正确的号码时,您将退出

这就是全部代码:

int main(int argc, char*argv[])
{

    int numberYouChoose = 0;
    int MysteryNumber = 0;
    const int MAX = 100, MIN = 1;


    printf("What's the number?\n");
    scanf("%d", &numberYouChoose);

    srand(time(NULL));
    MysteryNumber = (rand() % (MAX - MIN + 1)) + MIN;


    while (numberYouChoose != MysteryNumber)
    {
        printf("Boooooh Try again!\n");
        printf("What's the number?\n");
        scanf_s("%d", &numberYouChoose);
    }

    printf("Yay you found it!\n");


    return 0;
}

您的代码存在一些问题:

  • 胡安在早些时候的回答中指出,控制结构是错误的。简单地将do-while更改为a-while-do会让您的代码在用户有机会猜测之前报告“Boooh…”(除非您重复询问数字,这不是一个好主意)
  • 在代码行
    if(numberYouChoose==MysteryNumber);
    中,尾随的
    是一个空语句,因此将始终执行下面的
    printf
  • 以下工作:

    int main( int argc, char*argv[])
    {
        int numberYouChoose = 0;
        int MysteryNumber = 0;
        const int MAX = 100, MIN = 1;
    
        srand(time(NULL));
    
        MysteryNumber = (rand() % (MAX - MIN + 1)) + MIN;
    
        while ( 1 )
        {
            printf("What's the number?\n");
            scanf("%d", &numberYouChoose);
            if (numberYouChoose == MysteryNumber)
            {
                printf("Yay you found it!\n");
                break;
            }
            printf("Boooooh Try again!");
        }
    
         return 0;
    }
    

    (1)
    的计算结果始终为true,因此,理论上这将永远循环。但是,如果您猜对了,代码会报告这一点,然后
    中断
    会导致while循环终止,代码会在while循环后继续。

    嗨@Juan carlos rodriguez,谢谢您的回答!感谢您的建议和支持,我尝试更改代码我现在知道了:
    code
    (…)srand(time(NULL));MysteryNumber=(rand()%(MAX-MIN+1))+MIN;printf(“数字是什么?\n”);scanf(“%d”,&numberYouChoose);while(numberYouChoose!=MysteryNumber){printf(“booooh重试!\n”);printf(“数字是什么?\n”);scanf(“%d”,&numberYouChoose);}如果(numberYouChoose==MysteryNumber){printf(“耶,你去吧!”);}返回0;}@Ringii不客气,如果这有助于你别忘了将其标记为答案并投票:)@Ringii看看我上次的编辑。我给了你一些解释:D不需要检查数字是否正确。如果你在离开时离开了
    ,那是因为你猜到了这个数字,我非常感谢你!!你的解释对我来说真的很珍贵!!我现在就试试这段代码:)你好,尼克,谢谢你的解释,这段代码非常清晰,帮助我理解了很多东西,这在我第一次写这段代码时绝对是个大问号。我真的很感激,我要试试这个:)我发现这行
    printf(“线索:%d\n”,MysteryNumber)很有帮助就在while循环之前。它加快了测试速度;)@尼克,你可能比我更有经验,但据我所知,使用
    break
    并没有遵循好的做法,对吗?我的意思是,在每次迭代中进行评估不是更好吗?@JuanCarlosRodriguez,是的,使用
    break
    有缺点。我之所以选择在这里,是因为C语言中缺少“repeat while do”控制结构,这意味着我们将被迫复制用户输入(正如您所做的)或成功测试。看见
    int main( int argc, char*argv[])
    {
        int numberYouChoose = 0;
        int MysteryNumber = 0;
        const int MAX = 100, MIN = 1;
    
        srand(time(NULL));
    
        MysteryNumber = (rand() % (MAX - MIN + 1)) + MIN;
    
        while ( 1 )
        {
            printf("What's the number?\n");
            scanf("%d", &numberYouChoose);
            if (numberYouChoose == MysteryNumber)
            {
                printf("Yay you found it!\n");
                break;
            }
            printf("Boooooh Try again!");
        }
    
         return 0;
    }