【问题标题】:Using getNum(); Properly and Infinite Loop Problems使用 getNum();正确和无限循环问题
【发布时间】:2012-10-08 23:01:12
【问题描述】:

我正在尝试做的这个任务有一些问题。基本上我需要一个菜单​​,4个选项,其中两个接受用户的输入,作为基数和指数的形式。第三个输出base raise 的结果,然后第四个退出程序。

我在通过 getNum() 获取用户输入时遇到问题;我不太确定如何正确使用它。只是看看一些关于如何让我的代码更好地工作的技巧。

寻求帮助:

  1. 接受来自两个不同函数的用户输入并将其用于 输出答案
  2. 解决选择菜单选项时的无限循环问题
  3. 在每个功能完成后将程序循环回主菜单,并且仅 选择菜单选项 4 时退出程序

    int main(void)
    {
        int option = 0;
        do
        {
            loadMenu();
                while (option<1 || option>4)
                {
                    printf("\nChoose an option between 1 and 4:");
    
                    option = getNum();
                    while (getNum() != '\n');
                }
                switch (option)
                {
                    case 1:
                        baseChange();   //Gets base number
                        break;
                    case 2:
                        powerChange();  //Gets exponent
                        break;
                    case 3:
                        calcMath(); //Calculates the answer
                        break;
                    default:
                        break;
                }
        }
    
            while (option != 4);
            printf("Goodbye!\n");
    }
    void loadMenu()                      //Menu choices
    {
        printf("Power Menu:\n" );
        printf("  1. Change base\n");
        printf("  2. Change exponent\n");
        printf("  3. Calculate\n");
        printf("  4. Exit\n");
        printf("Option?\n");
    }
    
    int baseChange(int base)
    {   
        printf("What is your base?: ");
    
        base = getNum();
        while (getNum() != '\n');
    
        return base;
    }
    
    int powerChange(int power)
    {
    
        printf("What is the power?: ");
    
        power = getNum();
        while (getNum() != '\n');
    
        return power;
    }
    
    int calcMath(int base, int power)
    {
        int index = 0;
        long answer = 1.00;
    
        for(index = 1; index <= power; index++) answer = answer * base;
        {
            printf("%d raised to the power of %d is %ld.\n\n", base, power, answer);
        }
    
        return answer;
    }
    

【问题讨论】:

  • getNum() 到底是什么?你有实现吗?
  • 你一直提到的这个“getNum”是什么,为什么你期望它返回整数和字符('\n')?
  • @rmtheis 不,该标签已弃用。
  • 您应该将编译器中的警告级别设置为最大。例如,这会告诉您 main() 被声明为 int 但不返回值。

标签: c loops infinite


【解决方案1】:

我在通过 getNum() 获取用户输入时遇到问题;我也不是 确定如何正确使用它。

您还没有告诉我们有关此功能的任何信息;它不是 C 标准的一部分。

只是查看一些关于如何使我的代码更好地工作的提示。寻求帮助:

我认为这还为时过早。把更多的精力放在解决你的问题上,如果你有具体的问题再回来。更像这个:

解决选择菜单选项时的无限循环问题

看看你的程序在第二次循环中对 option 做了什么。

【讨论】:

    【解决方案2】:

    请在 main() 之前声明 getnum() 函数,如下所示;

    /* declare getnum() prior to its first use */
    float getnum(void)
    {
      float x;
    
      printf("Enter a number: ");
      scanf("%f", &x);
      return x;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-02
      • 2014-09-03
      • 2021-09-02
      • 2020-09-09
      • 2021-09-11
      相关资源
      最近更新 更多