有没有办法在平均值中不包含负数,输入负数时是否终止程序?

时间:2012-10-29 00:35:38

标签: c++

对于那些看过我之前帖子的人,最后一次感到抱歉。它充满了粗心的错误和错别字。这是我的任务:

  
    

“编写一个程序,使用户能够通过输入语句输入一系列非负数。在输入过程结束时,程序将显示:奇数的数量及其平均值;数字偶数和它们的平均值;输入的数字总数。通过输入负值使输入过程停止。确保告知用户这个结束条件。“

  

这是我的代码:

#include <iostream>
#include <iomanip>

using namespace std;

int main()
{
    int number, total1=0, total2=0, count1=0, count2=0;
    do
    {
        cout << "Please enter a number. The program will add up the odd and even ones separately, and average them: ";
        cin >> number;

        if(number % 2 == 0)
        {
            count1++;
            total1+=number;
        }
        else if (number >= 0)
        {
            count2++;
            total2+=number;
        }
    }
    while (number>=0);
        int avg1 = total1/count1;
        int avg2 = total2/count2;
        cout << "The average of your odd numbers are: " << avg1 << endl;
        cout << "The average of your even numbers are " << avg2 << endl;
}

它似乎工作正常,但是当我输入一个负数来终止程序时,它将其包含在其余的平均数中。有什么建议来解决这个问题吗?我知道这是可能的,但这个想法让我感到安慰。

3 个答案:

答案 0 :(得分:2)

你的主循环应该是这样的:

#include <iostream>

for (int n; std::cout << "Enter a number: " && std::cin >> n && n >= 0; )
{
    // process n
}

或者,如果要发出诊断信息:

for (int n; ; )
{
    std::cout << "Enter a number: ";

    if (!(std::cin >> n)) { std::cout << "Goodbye!\n"; break; }

    if (n < 0) { std::cout << "Non-positve number!\n"; break; }

    // process n
}

答案 1 :(得分:1)

此后:

cout << "Please enter a number. The program will add up the odd and even ones seperately, and average them: ";
cin >> number;

立即检查数字是否为负数

if(number < 0) break;

现在您不需要使用do-while循环来检查数字是否为负数。因此,您可以使用无限循环:

while(true) {
   cout << "Please enter a number. The program will add up the odd and even ones seperately, and average them: ";
   cin >> number;

   if(number < 0) break;

   // The rest of the code...
}

其他: 你的代码有问题。您没有向用户显示偶数和奇数的数量以及输入的总数。

另一个附加:您应该使用更有意义的变量名称:

int totalNumEntered = 0, sumEven = 0, sumOdd = 0, numEven = 0, numOdd = 0;

当然,我并不限制你这些名字。您也可以使用其他类似名称。

针对整数分部问题: 您必须将表达式值转换为正确的类型(在这种情况下,它是float)。您还应将平均变量的类型更改为float

float avg1 = float(total1) / float(count1);
float avg2 = float(total2) / float(count2);

答案 2 :(得分:0)

在cin&gt;&gt;之后立即号码,检查&lt; 0,如果是这样打破。尝试逐行遍历程序以了解执行流程。玩得开心,祝你好运!