【问题标题】:Guessing game - stuck in loop.猜谜游戏 - 陷入循环。
【发布时间】:2016-11-03 23:50:31
【问题描述】:

我正在开发一个猜谜游戏程序。主函数要求用户猜测一个数字,如果该数字不等于正确猜测,则将其发送到另一个函数,告诉用户该数字是太高还是太低。然后第二个函数要求用户进行另一个猜测,并将该猜测发送回第一个函数。

我的代码被困在第二个函数中,似乎没有退出它。我不确定要改变什么。

#include <stdio.h>

int guess(int num);

int main(void)
{
    int units;  

    printf("How many legs on a wonderwump??\n");
    scanf_s("%d", &units);
    while (units != 56)
    {
        guess(units);
    }
    printf("Great guess!\n");
    return 0;
}

int guess(int num)
{

    if (num > 56)
    {
        printf("Too high of a guess! Try again!");
    }
    else // (num < 56)
    {
        printf("Too low of a guess! Try again!");
    }

return scanf_s("%d", &num);

}

【问题讨论】:

  • units=guess(units) ;
  • guess() 函数返回 etiher 0 或 ` 或 EOF,而不是实际的猜测值。这是因为这一行:return scanf("%d", &amp;num); 正在返回对scanf() 的调用的状态,而不是num 的内容,并且函数的调用者甚至没有检查返回的值。
  • 在调用任何scanf() 系列函数时,始终检查返回值(而不是参数值)以确保操作成功。
  • 此代码块:while (units != 56) { guess(units); } 不会更新 main() 函数中的变量 'units',因此此循环将永远运行。
  • 建议阅读scanf_s() 的手册页,为了便于携带,建议改为调用scanf()。如果在 Windows 下运行,这可能需要在程序开头添加一行:#define _CRT_SECURE_NO_WARNINGS

标签: c if-statement


【解决方案1】:

您需要在每次调用第二个函数后重置units 值,因为现在它永远不会被更改。

所以改变

while (units != 56) {
  guess(units);
}

while (units != 56) {
  units = guess(units);
}

【讨论】:

  • 我试过了,但我仍然卡在第二个函数的 if 或 else 中。
【解决方案2】:

您的代码错误。将guess 函数替换为:

int guess(int num)
{

    if (num > 56)
    {
        printf("Too high of a guess! Try again!");
        return 1;
    }
    else if (num < 56)
    {
        printf("Too low of a guess! Try again!");
        return 1;
    } else 
        return 0;
}

while (units != 56)
{
    guess(units);
}

应该是

while (1)
{
    if(guess(units) == 0)
       break;
}

【讨论】:

    【解决方案3】:

    使用guess(units),您通过值传递变量(值被复制),您可以使用guess(&amp;units)通过引用发送它:

    #include <stdio.h>
    
    void guess(int* num);
    
    int main(void)
    {
        int units;  
    
        printf("How many legs on a wonderwump??\n");
        scanf("%d", &units);
        while (units != 56)
        {
            guess(&units);
        }
        printf("Great guess!\n");
        return 0;
    }
    
    void guess(int* num)
    {
        if (*num > 56)
            printf("Too high of a guess! Try again!\n");
        else // (num < 56)
            printf("Too low of a guess! Try again!\n");
        scanf("%d", num);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      • 2015-10-22
      相关资源
      最近更新 更多