【问题标题】:Exiting while(1) loop in C programming在 C 编程中退出 while(1) 循环
【发布时间】:2018-04-27 20:39:36
【问题描述】:

我正在为我的C 编程课做例子。其中一个例子是:

更新:return 0;break; 之间的区别

#include<stdio.h>
int main()
{

while(1)
{
  printf("Enter number: ");
  scanf("%d", &num);

  if (num==2)
   {
      return 0;
   }
  else
   {
      printf("Num = %d", num);
   }

return 0;
}

我知道while(1)是一个无限循环。 为了摆脱循环,我通常使用break;

但是,在这个例子中,当num=2 退出循环时。

我不明白return o; 如何影响while(1) 循环?

【问题讨论】:

  • 我只用了return 0;在主程序的末尾。这是我第一次在循环中看到它。我知道如果程序执行成功,那么它会返回 0。
  • 显示其余代码,即请创建一个minimal reproducible example。它对于解释返回的作用具有重要的背景。
  • 一些评论恕我直言的人真的需要阅读stackoverflow.blog/2018/04/26/…
  • 伙计们不要对我太苛刻 :D 我正在自己研究这些,有时程序中非常简单的部分会造成很多混乱。

标签: c while-loop return-value infinite-loop


【解决方案1】:
return 0;

退出你所在的函数,返回值为0。所以,如果它离开了函数,显然是离开了函数中的while循环。

【讨论】:

    【解决方案2】:

    return 立即退出函数——不管程序正在做什么。

    如果您在main 函数中执行while(1) 循环,return 将立即退出main 函数,这意味着它将退出程序并退出无限循环。

    如果你在其他函数中执行循环,比如fooreturn 仍然会立即退出foo 函数,这仍然意味着它会退出无限循环。

    【讨论】:

    • 是的,据我了解,返回0的位置无关紧要;
    • 当程序行到达时返回 0;程序通过返回零终止
    【解决方案3】:

    为了更好地向您解释,让我们在您的代码中添加几行:

    #include<stdio.h>
    int main()
    {
    
        while(1)
        {
            printf("Enter number: ");
            scanf("%d", &num);
    
            if (num==2)
            {
                return 0;
            }
            else
            {
                printf("Num = %d", num);
            }
         }
    
         printf ("BYE\n");
         return 0;
    }
    

    让我们用break 代替return 0;

    #include<stdio.h>
    int main()
    {
    
        while(1)
        {
            printf("Enter number: ");
            scanf("%d", &num);
    
            if (num==2)
            {
                break;
            }
            else
            {
                printf("Num = %d", num);
            }
         }
    
         printf ("BYE\n");
         return 0;
    }
    

    第一个代码的输出不包含消息“BYE”,而第二个代码则包含。

    所以总结 return 终止函数并且不执行它下面的任何内容,其中 break 终止循环并且程序不执行循环中的剩余行。

    【讨论】:

    • 谢谢,我明白了。我的困惑正是在这两个上。
    【解决方案4】:

    return 终止函数并将控制权返回给调用函数(如果有)。 这就是它跳出任何循环、条件或其他控制结构的原因。

    返回值在这方面并不重要。

    【讨论】:

      猜你喜欢
      • 2017-06-14
      • 2018-03-18
      • 1970-01-01
      • 1970-01-01
      • 2013-05-15
      • 1970-01-01
      • 2013-08-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多