C++ 如何删除冗余输入?

C++ 如何删除冗余输入?,c++,C++,我正在编写代码,以获取数组中的10个值,获得它们的平均值,并计算数组中大于平均值的元素数。我的代码出错了。它需要额外的输入,即使我不是有意的。如果输入为12345-1-2-3-4-5,则输出应为5 #include <iostream> using namespace std; int main() { int a[5],i,*p,n; for(i=0;i<10;i++) cin>>a[i]; int sum=0;

我正在编写代码,以获取数组中的10个值,获得它们的平均值,并计算数组中大于平均值的元素数。我的代码出错了。它需要额外的输入,即使我不是有意的。如果输入为
12345-1-2-3-4-5
,则输出应为
5

#include <iostream>
using namespace std;

int main()
{
    int a[5],i,*p,n;
    for(i=0;i<10;i++)
        cin>>a[i];
    int sum=0;
    p=a;
    n=0;
    for(i=0;i<10;i++){
        sum+=(*p+i);
    }
    int avg=sum/10;
    for(i=0;i<10;i++){
        if((*p+i)>avg){
            n++;
        }
    }
    cout<<n<<endl;
    return 0;
}
#包括
使用名称空间std;
int main()
{
inta[5],i,*p,n;
对于(i=0;i>a[i];
整数和=0;
p=a;
n=0;
对于(i=0;i3)所需的变化:

1) 数组的大小应为10

2) 正确使用括号以使用指针访问内存位置的值

3) 使用
double
表示平均值

请查看以下实现:

#include <iostream>


int main()
{
    int a[10],i,*p,n;
    for(i=0;i<10;i++)
        std::cin>>a[i];
    int sum=0;
    p=a;
    n=0;
    for(i=0;i<10;i++){
        sum += *(p+i);
    }

    double avg = (double)sum/(double)10;

    std::cout<<"Sum: "<<sum<<std::endl;
    std::cout<<"Average: "<<avg<<std::endl;

    for(i=0;i<10;i++){
        if(*(p+i)>avg){
            n++;
        }
    }
    std::cout<<"Count: "<<n<<std::endl;
    return 0;
}
PS:检查使用名称空间标准的缺点。

3所需更改:

1) 数组的大小应为10

2) 正确使用括号以使用指针访问内存位置的值

3) 使用
double
表示平均值

请查看以下实现:

#include <iostream>


int main()
{
    int a[10],i,*p,n;
    for(i=0;i<10;i++)
        std::cin>>a[i];
    int sum=0;
    p=a;
    n=0;
    for(i=0;i<10;i++){
        sum += *(p+i);
    }

    double avg = (double)sum/(double)10;

    std::cout<<"Sum: "<<sum<<std::endl;
    std::cout<<"Average: "<<avg<<std::endl;

    for(i=0;i<10;i++){
        if(*(p+i)>avg){
            n++;
        }
    }
    std::cout<<"Count: "<<n<<std::endl;
    return 0;
}

PS:检查使用名称空间标准的缺点。

inta[5]
-->
inta[10]
,否则您将索引超出范围。您有一个包含5个元素的数组,但您从控制台向数组中读取了10个数字。您超出了数组的范围。
sum+=(*p+i);
-->
sum+=p[i];
*
+
具有更高的优先级,因此您只需将
i
添加到数组的第一个元素10次。您甚至不需要
p
,只需索引
a
。如果您有内存覆盖,那么从那一点开始的程序基本上是无用的。此后您观察到的任何内容覆盖变得毫无意义。哦,对了!愚蠢的错误。
inta[5]
-->
inta[10]
,否则您将索引超出范围。您有一个包含5个元素的数组,但您从控制台向数组中读取了10个数字。您超出了数组的范围。
sum+=(*p+i);
-->
sum+=p[i];
*
+
具有更高的优先级,因此您只需将
i
添加到数组的第一个元素10次。您甚至不需要
p
,只需索引
a
。如果您有内存覆盖,那么从那一点开始的程序基本上是无用的。此后您观察到的任何内容覆盖变得毫无意义。哦,对了!愚蠢的错误。