注册 登录
编程论坛 C语言论坛

编写一个程序,最多将10 个donation值读入到一个double数组中。如果程序遇到非数字输入时将结束输入,并报告这些数的平均值以及数组中有多少个数字大于平

C00000001 发布于 2021-05-15 20:08, 1605 次点击
编写一个程序,最多将10 个donation值读入到一个double数组中。如果程序遇到非数字输入时将结束输入,并报告这些数的平均值以及数组中有多少个数字大于平均值
代码1:#include<iostream>
#include<cctype>
const int SIZE = 10;
int main()
{
    using namespace std;
    double* pd = new double[SIZE];
    int i = 0;
    while (i < SIZE)
    {
        cin >> pd[i];
        if (!isdigit(pd[i]))
            break;
        i++;
    }
    if (i == 0)
        cout << "There is no data." << endl;
    else
    {
        double average, sum;
        int count = 0;
        sum = 0;
        for (int i = 0; i < SIZE; i++)
            sum += pd[i];
        average = sum / SIZE;
        cout << "Average: " << float(average) << endl;
        for (int i = 0; i < SIZE; i++)
        {
            if (average < pd[i])
                count++;
        }
        cout << "Number(beyond average): " << count << endl;
    }
    delete[] pd;
    return 0;
}
代码2:
#include<iostream>
#include<cctype>
const int SIZE = 10;
int main()
{
    using namespace std;
    double* pd = new double[SIZE];
    int i = 0;
    while (i < SIZE)
    {
        cin >> pd[i];
        i++;
    }
    if (i == 0)
        cout << "There is no data." << endl;
    else
    {
        double average, sum;
        int count = 0;
        sum = 0;
        for (int i = 0; i < SIZE; i++)
            sum += pd[i];
        average = sum / SIZE;
        cout << "Average: " << float(average) << endl;
        for (int i = 0; i < SIZE; i++)
        {
            if (average < pd[i])
                count++;
        }
        cout << "Number(beyond average): " << count << endl;
    }
    delete[] pd;
    return 0;
}
若删除代码1中
if (!isdigit(pd[i]))
            break;
这个程序就可以正确运行;
但是我想通过
if (!isdigit(pd[i]))
            break;
来判断输入的是否为数字。
我代码1 错在哪了?

[此贴子已经被作者于2021-5-15 20:10编辑过]

3 回复
#2
我善治鬼2021-05-15 20:28
double* pd = new double[SIZE];// 数组未初始化为0, 存在垃圾值

for (int i = 0; i < SIZE; i++)    // 这里你将10个垃圾值相加
sum += pd[i];

你应该改为 while (i--)
#3
C000000012021-05-15 21:00
回复 楼主 C00000001
double* pd = new double[SIZE];
    int i = 0;
    while (i < SIZE)
    {
        cin >> pd[i];
        if (!isdigit(pd[i]))
            break;
        i++;
    }
我通过new 分布内存,然后通过while来给数组赋值
#4
我善治鬼2021-05-15 21:13
你这句没有错
double* pd = new double[SIZE];
    int i = 0;
    while (i < SIZE)
    {
        cin >> pd[i];
        if (!isdigit(pd[i]))
            break;
        i++;
    }
错在这里
for (int i = 0; i < SIZE; i++)    // 这里你将10个垃圾值相加
sum += pd[i];
1