简单而while循环不终止(初学者)

时间:2014-01-07 04:57:03

标签: c++ while-loop

这就是我希望我的程序要做的事情。提示用户输入10个整数。然后我的程序将偶数整数相加,将奇数整数相加,然后显示两个总和。简单的初学者练习。为此,我使用带控制变量的while循环。以下是我的全部代码:

    #include <iostream> 

    using namespace std;

    int main()
    {

        int evenSum = 0;
        int oddSum = 0;
        int num;
        int control = 0; 

        cout << "Enter 10 integers: " << endl; 

        cin >> num; 

        while (control <= 10)
        {
            if (num%2 == 0)
            {
                evenSum = evenSum + num;
            }
            else
            {
                oddSum = oddSum + num;
            }

            control++;

            cin >> num; 

        }

        cout << "The sum of the even integers is " << evenSum << endl;

        cout << "The sum of the odd integers is " << oddSum << endl;

        return 0;

    }

为了测试这段代码,我使用前10个正整数作为输入,1-10。但是,我有几个头痛。首先,控制永远不会从while循环传递,即程序永远不会到达显示evenSum和outSum变量值的点。我有一段时间搞清楚为什么while循环永远不会终止。正如我写的那样,一旦control = 11,while条件就会变为false,而控制变量会在while体的末尾递增,所以它不应该继续。它确实如此。

我的第二个头痛(可能是相关的)是我的输入中偶数的总和应该是30,并且奇数的总和应该是25.但是,当我的程序得到oddSum正确时,它只是总和平均最多20个,因此由于某种原因不计算最后一个数字(10)。

我在纸上仔细地仔细阅读了这个程序。此外,我已经让它显示变量值,因此我可以跟踪每个循环时它正在做什么。最终,它只是停止显示输出,但没有实际终止。并且它正确地计算了平均值和赔率,只是没有添加最后一个数字。

在我看来,这里至少有一个一个一个错误,可能有两个相互复合的错误。但我已经尝试调整我的各种价值观而且没有做任何事情。我的另一个想法是,我怀疑我设置输入流的方式。即我不确定在while循环的最后一次迭代中将为num分配什么值。

任何人都可以解释这些问题吗?

5 个答案:

答案 0 :(得分:2)

读取循环顶部(检查计数后)

// cin >> num; 
while (control <= 10)
{
  cin >> num;
  if (num%2 == 0)
  {
    evenSum = evenSum + num;
  }
  else
  {
    oddSum = oddSum + num;
  }
  control++;
  // cin >> num; 
}

答案 1 :(得分:1)

要求在循环内输入数字,它很容易理解何时输入特定数字

     int control = 1;

     while (control <= 10)
        {
           cout << "Enter integer at position:"+Control << endl; 
            cin >> num; 
            if (num%2 == 0)
            {
                evenSum = evenSum + num;
            }
            else
            {
                oddSum = oddSum + num;
            }

            control++;         

        }

答案 2 :(得分:1)

尝试跟踪代码执行情况。手动。这是学习计算机思考方式的最佳方式。

你会意识到,循环条件已被破坏。你从0开始计数,继续高达10,包括,停止在11. 0..10,这是11个数字!

此外,您在开始时读取输入一次,然后在每次迭代结束时读取一次。这使得12次读取。

当尝试读取比提供的更多输入时,程序会阻塞并等待更多输入。无限循环中的程序处于活动状态,它会占用您的所有CPU资源。在这种情况下,程序被阻止,并且几乎不使用任何资源。

答案 3 :(得分:0)

我看不到错误。只有你需要输入11个数字而不是10个数字的问题。你试过输入11个数字吗?

答案 4 :(得分:0)

嘿,我也是初学者,但我试着回答你的问题。你也可以使用复合赋值,即+ =而不是重复evenSum和oddSum两次。

            #include <iostream> 

            using namespace std;

            int main()
            {

                int evenSum = 0;
                int oddSum = 0;
                int num;
                int control = 0;
                cout << "Enter 10 integers: " << "\n";

                while (control <= 9 )
                {
                    cin >> num;

                    if (num % 2 == 0)
                    {
                        evenSum += num;
                    }
                    else
                    {
                        oddSum += num;
                    }

                    control++;
                }

                cout << "The sum of the even integers is: " << evenSum << "\nThe sum of the odd integers is: " << oddSum << "\n";

                return 0;

            }