【问题标题】:Why am I getting an infinite loop?为什么我得到一个无限循环?
【发布时间】:2012-11-04 20:30:30
【问题描述】:

我的输出反复打印正面或负面。为什么我得到一个无限循环?我使用了以下内容:

include iostream 
using namespace std; 

int main()
{
    int num;

    cout<<"enter number"<<endl;
    cin>>num;

    while(num!=0)
    {
        if(num>0)
            cout<<"positive"<<endl;
        else
            cout<<"negative"<<endl;
    }

    return 0;
}

【问题讨论】:

    标签: loops infinite


    【解决方案1】:

    因为你有 while(num!=0) 并且没有任何东西可以改变它在循环中的值。

    【讨论】:

      【解决方案2】:

      根据 madflame991 的回答,这里是一个改进版 :)

      include iostream 
      using namespace std; 
      
      int main()
      {
          int num;
      
          do
          {
              cout<<"enter number"<<endl;
              cin>>num;
      
              if(num>0)
                  cout<<"positive"<<endl;
              else
                  cout<<"negative"<<endl;
          }while(num!=0);
      
          return 0;
      }
      

      【讨论】:

        【解决方案3】:

        num 的值在循环体中没有改变。

        【讨论】:

          【解决方案4】:

          你应该在循环内改变num的值,因为while循环的条件永远不会变成假。

          【讨论】:

            【解决方案5】:

            您还需要在循环中读取该值。如果你不这样做,那么 num 不会改变并且会永远保持不变,因此你要么得到一个无限循环,要么什么都没有(对于 num==0)

            {int num;
            
            cout<<"enter number"<<endl;
            cin>>num;
            
            while(num!=0)
            {
                cout<<"enter number"<<endl;
                cin>>num;
            
                if(num>0)
                    cout<<"positive"<<endl;
                else
                    cout<<"negative"<<endl;
            }
            return 0; }
            

            【讨论】:

              【解决方案6】:

              这是因为您的代码的逻辑。您首先从标准输入中读取一个数字,然后根据该数字不等于 0 的条件构造一个 while 循环。因此,如果通过标准输入提供的 num 的值不等于 0,您的程序将重复循环体一次又一次。

              在这段代码中,while 循环本身是不需要的。如果只是想根据 num 是否为正/负向用户打印一条消息,您可以离开 if / else 部分并像这样摆脱 while 循环:

                  using namespace std; 
                  int main() {
              
                  int num;
              
                  cout<<"enter number"<<endl;
                  cin>>num;
              
                  while(num!=0)
                  {
                      if(num>0)
                          cout<<"positive"<<endl;
                      else
                          cout<<"negative"<<endl;
                  }
              
                  return 0; 
              }
              

              另一种可能性是用户有机会多次输入 num 并在某些条件下中断 while 循环,如下所示:

              using namespace std; 
              int main() {
              
              int num;
              
              do {
              cout<<"enter number"<<endl;
              cin>>num;
                 if(num>0)
                      cout<<"positive"<<endl;
                  else if(num < 0)
                      cout<<"negative"<<endl;
              } while(num!=0);
              
              return 0; 
              

              }

              如果 num 等于 0,循环将结束。您也可以根据某些条件使用 break 语句显式跳出循环。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2021-08-31
                • 1970-01-01
                • 2012-04-04
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多