对于那些看过我之前帖子的人,最后一次感到抱歉。它充满了粗心的错误和错别字。这是我的任务:
“编写一个程序,使用户能够通过输入语句输入一系列非负数。在输入过程结束时,程序将显示:奇数的数量及其平均值;数字偶数和它们的平均值;输入的数字总数。通过输入负值使输入过程停止。确保告知用户这个结束条件。“
这是我的代码:
#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;
}
它似乎工作正常,但是当我输入一个负数来终止程序时,它将其包含在其余的平均数中。有什么建议来解决这个问题吗?我知道这是可能的,但这个想法让我感到安慰。
答案 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,如果是这样打破。尝试逐行遍历程序以了解执行流程。玩得开心,祝你好运!