【问题标题】:My increment doesn't work (c)我的增量不起作用(c)
【发布时间】:2017-06-06 10:42:38
【问题描述】:

所以,我有这段代码,最后当它达到 4(输入错误值的 4 倍)时,我有一个退出增量,但它不起作用:

int main() {
  int nej;
  printf("1-Triangulo \n");
  printf("2-Division \n");
  printf("3-Menu \n");
  printf("4-Bosque \n");
  printf("0-Salir \n");
  scanf("%d", &nej);
  if (nej == 1) {
    // Ejercicio 1-Triangulo:

    triangulo();
  }

  if (nej == 2) {
    // Ejercicio 2-Division:

    division();
  }

  if (nej == 3) {
    menu();
  }

  if (nej == 4) {
    arboles();
  }

  if (nej == 0) {
    // Salida
    exit(1);
  }

  int nerr = 0;

  while (nej < 0 || nej > 4) {
    nerr++;
    // Contador de error
    if (nerr == 4) {
      exit(1);
    }
  }
}

如何解决这个问题?

【问题讨论】:

  • 是用于检查 nerr 的 while 条件吗?
  • 你惹我生气了。我花时间让你的问题变得更好,你不在乎。

标签: c increment


【解决方案1】:

我相信你在 while 条件中有一个错字

while (nej < 0 || nej > 4) {
...

应该是:

while (nerr < 0 || nerr > 4) {
..

【讨论】:

    【解决方案2】:

    nej是输入,小于0或大于4的输入无效,正确的说法是:

    if (nej < 0 || nej > 4) {
    

    (而不是while,因为nej 在代码块中没有更改)。

    【讨论】:

      【解决方案3】:

      如果每次读取时都初始化int nerr = 0;,则流程永远不会达到退出条件

       int main()
       {
      int nej;
      
      int nerr = 0; // Keep the counter outside the loop
      
      while (true){//Start a infinite loop here
      
      printf("1-Triangulo \n");
      printf("2-Division \n");
      printf("3-Menu \n");
      printf("4-Bosque \n");
      printf("0-Salir \n");
      scanf("%d", &nej);
      
      
      if (nej == 1) {
        // Ejercicio 1-Triangulo:
      
        triangulo();
      }
      
      if (nej == 2) {
        // Ejercicio 2-Division:
      
        division();
      }
      
      if (nej == 3) {
        menu();
      }
      
      if (nej == 4) {
        arboles();
      }
      
      if (nej == 0) {
        // Salida
        exit(1);
      }
      
      
      
      while (nej < 0 || nej > 4) {
        nerr++;
        // Contador de error
        if (nerr == 4) {
          exit(1);
        }
      }
      }
      

      【讨论】:

      • 我相信变量的声明可以在代码块中的任何地方,并且它的初始化将在每个代码块中执行一次。所以它不在执行流程中执行(即每次控制通过声明时)。但是,该变量只有在其声明点之后才为人所知。
      【解决方案4】:

      它有以下错误:

      • 代码应该在while循环中
      • 变量nerr应该在while循环之外声明和初始化
      • 变量nerr 应该控制while 循环

      注意:可以使用多个if。但是使用switch 是非常方便和可取的。

      修正后的代码如下:

       int main() {
         int nej;
         int nerr = 0;
         while (nerr < 4) {
         printf("1-Triangulo \n");
         printf("2-Division \n");
         printf("3-Menu \n");
         printf("4-Bosque \n");
         printf("0-Salir \n");
         scanf("%d", &nej);
      
         switch(nej){
         case 1:// Ejercicio 1-Triangulo:
           triangulo();
         break;
         case 2:// Ejercicio 2-Division:
           division();
         break;
         case 3:
           menu();
         break;
         case 4:
           arboles();
         break;
         case 0:// Salida
           exit(1);
         break;
         default: 
           nerr++;
         }
           // Reset 'nerr' if any valid vaue is entered by user
           if ((nej >= 0) && (nej <= 4)) {
             nerr = 0;
           }
         }
       }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-08-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-18
        • 2016-01-30
        相关资源
        最近更新 更多