C++ 如何删除冗余输入?
我正在编写代码,以获取数组中的10个值,获得它们的平均值,并计算数组中大于平均值的元素数。我的代码出错了。它需要额外的输入,即使我不是有意的。如果输入为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;
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
。如果您有内存覆盖,那么从那一点开始的程序基本上是无用的。此后您观察到的任何内容覆盖变得毫无意义。哦,对了!愚蠢的错误。