【问题标题】:How to keep a while loop going?如何保持while循环继续?
【发布时间】:2020-03-29 18:58:41
【问题描述】:

我正在开发一个程序,该程序应该一直要求用户输入,有点像菜单,直到他们选择退出选项。根据他们的选择,将根据选择进行某种操作。现在我只是想测试菜单是否会继续打印给用户,但是一旦我运行程序一次,它就会自动退出。这就是我所拥有的:

#include <stdio.h>
#include <string.h>

int main()
{
  char str;
  unsigned int hex;
  int decimal;


  while(str != 'Q'){
    printf("Choose an Option (C, M, Q, S, V): ");
    scanf("%c", &str);

    if(str == 'C'){
      printf("C working.");
      break;
    }
    else if(str == 'M'){
      printf("M working.");
      break;

    }
    else if(str == 'S'){
      printf("S working.");
      break;

    }
    else if (str == 'V'){
      printf("V working.");
      break;

    }




  }
    return 0;
}

Q 是选择后会立即退出程序的选项,但其他选项不是。

我得到的示例输出:

Choose an Option (C, M, Q, S, V): M
M working. (base)

【问题讨论】:

  • 我以为break 刚刚退出了最里面的循环,在这种情况下,这就是我所在的 if 循环

标签: c while-loop


【解决方案1】:

break 退出 while 循环。 if 语句不是循环结构,因此break 是用于最近的循环,即 while。

【讨论】:

    【解决方案2】:

    如果您希望菜单继续向用户打印,只需删除每个 (if,else if) 块中的 break 语句。因为 breakcontinue 语句会影响离它们最近的重复语句,即代码中的 while 循环

    【讨论】:

      【解决方案3】:

      看来你想在'Q'break

      int main()
      {
        char str = null;
        unsigned int hex;
        int decimal;
      
        while(1 == 1) { /* infinite loop until user breaks with a help of Q */
          printf("Choose an Option (C, M, Q, S, V): ");
          scanf("%c", &str);
      
          if (str == 'Q') /* break on Q only */
            break; 
      
          /* All the other cases: perform the operation and ask again */
          if(str == 'C'){
            printf("C working.");
          }
          else if(str == 'M'){
            printf("M working.");
          }
          else if(str == 'S'){
            printf("S working.");
          }
          else if (str == 'V'){
            printf("V working.");
          }
        }
      
        return 0;
      }
      

      【讨论】:

      • 好的,我现在知道了。我没有那样想。感谢您的帮助!
      【解决方案4】:

      你需要初始化str

      int main()
      {
        char str = 0;
        unsigned int hex = 0;
        int decimal = 0;
      
      ...
      

      【讨论】:

      • 我已经尝试过了,但仍然导致同样的问题。另外,我在网上某处读到 C 自动初始化了所有未初始化为 0 的变量。
      • @jaaytbe 你需要回去再读一遍。一些变量初始化为0,但前提是它们是全局变量,或者用static关键字声明的变量。局部变量(不是static不会自动初始化,它们必须在代码中显式初始化。
      • 这就是为什么我通常不再回答 SO 问题了?‍♂️
      猜你喜欢
      • 2014-03-11
      • 2015-07-26
      • 1970-01-01
      • 1970-01-01
      • 2015-05-27
      • 1970-01-01
      • 2015-04-16
      • 2019-02-26
      • 2020-06-09
      相关资源
      最近更新 更多