【问题标题】:Return to the beginning of an if statement返回到 if 语句的开头
【发布时间】:2014-12-09 17:06:03
【问题描述】:

我想知道当用户输入我们不希望他输入的内容时,是否有任何方法可以返回到 if 语句的开头。例如:

#include <stdio.h>

int main()
{
    int number1;

    printf("Please enter a number:"); scanf("%d", &number1);

    if(blablabla)
        printf("blabla");
    else if(blablabla)
        printf("blabla");
    else if(blablabla)
        printf("blabla");
    else
        /*I want to return to the beginning of this if statement so the user can try again*/
}

我在 goto 上看到了一些东西,但我不确定这是要走的路... 非常感谢! :]

【问题讨论】:

  • 不,goto 很可能不是正确的选择!它只用于极少数、非常具体的事情。但是,您可以简单地将整个代码包装在 while 循环中,如果输入与您的任何预期输入都不匹配,则重复执行
  • 我绝对不会为此使用goto。我会使用while 循环。或者把它分解成一个函数并使用 recursion 如果你感觉很活泼。
  • @DrewMcGowen 我编辑了我的评论以使其更清楚。
  • goto 绝对不是要做的事情:do while 循环非常适合您的问题

标签: c if-statement return goto


【解决方案1】:

试试while语句:

int valueIWantItToBe = 1;//Whatever value you want
do {
    printf("Please enter a number:"); scanf("%d", &number1);
} while (number1 != valueIWantItToBe);

【讨论】:

  • 在您的示例中将valueIWantItToBe 初始化为某个数字,只是为了使其...完成。
【解决方案2】:

全部放在一个while循环里面,只有输入好的才退出循环。

while (true) {
    printf("Please enter a number:"); 
    scanf("%d", &number1);
    if (blablabla) {
        printf("blabla");
        break; //good and break
    } else if (blablabla) {
        printf("blabla");
        break; //good and break
    } else if(blablabla) {
        printf("blabla");
        break; //good and break
    }
    // no good and stays
}

【讨论】:

  • wile(true) 对于您可能不希望出现无限循环的情况似乎非常糟糕......
  • 我认为目的是在第一个 if 语句之前进行输入
  • @aruisdante:我认为这一点无限循环,直到你点击正确的输入
  • 好吧,这意味着被错误的答案所困扰。我认为问题不大。
  • 在第一个 if 之前添加了 scanf,猜想这会导致部分混淆,就像代码的意图一样。 @DrewMcGowen,感谢您的参与!
【解决方案3】:

您可以稍微重构一下以使用 do-while 循环。我目前无法使用 gcc,但可以尝试以下方式:

#include <stdio.h>

int main()
{
    int number1;

    bool continueLooping = true;    
    do 
    {
        printf("Please enter a number:"); scanf("%d", &number1);
        if (successful input 1)
        {
            /* perform some action */
            continueLooping = false;
        }
        else if (successful input 2)
        {
            continueLooping = false;
        }
        else
        {
            /* Failed input */
        }

    } while (true == continueLooping);
}

编辑:一些细节

基本上,您希望无限执行,直到获得正确的输入。所以,改变焦点总是对“好”的输入采取行动。在输入上运行您的测试用例,对于每个成功的用例,您要选择退出循环。

在输入错误的情况下,不要改变循环条件,让你再次运行整个过程

【讨论】:

  • @DrewMcGowen 我可以看到解释实际发生的事情很有用,特别是对于学习简单循环的人。
【解决方案4】:

我认为您想在用户输入无效内容时重置main() 函数。如果是这样,试试这个:

function main(){

if(blablabla){

printf("blabla");
return false; /* If the code hits a "return false", 
the code stops running and resets the function. */

}

if(blablabla){

printf("blabla");
return false;

}

if(blablabla){

printf("blabla");
return false;

}

return true; // If the code does not "return false" then "return true".

}

如果有帮助,请告诉我。

【讨论】:

    【解决方案5】:
    int main()
    {
        int number1;
        int loop_state = 0;
    
     do{   
        printf("Please enter a number:"); scanf("%d", &number1);
          switch(number1)
             {
              case 1: break;
              case 2: break;
              default: loot_state = 1 ;/*User value is not as expected*/
              }
       }while(loop_state==1);
    
    return 0;
    }
    

    【讨论】:

      猜你喜欢
      • 2019-02-22
      • 2014-05-30
      • 2015-07-28
      • 2015-06-21
      • 2018-05-07
      • 2021-08-31
      • 2020-07-30
      • 2023-02-21
      • 2018-04-18
      相关资源
      最近更新 更多