C++程序问题,出现“段错误,可能是数组越界,或指针访问了不该访问的空间”,折磨了好几个小时了啊!!

#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
int m,n,i=0,j=0,q,b[20];
double t,v,p,g=0,a[20];
cin>>m>>n;
while(cin>>t>>v&&t!=0&&v!=0)
{
a[i]=v/t;
b[i]=t;
i++;
}
for(i=0; i<m-1; i++)
for(j=0; j<m-i-1; j++)
{
if(a[j]<a[j+1])
{
p=a[j+1];
a[j+1]=a[j];
a[j]=p;
q=b[j+1];
b[j+1]=b[j];
b[j]=q;
}
}
i=0;
while(1)
{
if(n-b[i]>0)
{
g+=a[i]*b[i];
n-=b[i];
}
else
{
g+=n*a[i];
break;
}
i++;
}
cout<<setiosflags(ios::fixed)<<setprecision(2);
cout<<g<<endl;
}

没有发现你的代码有你说的问题。但有其他问题,如输入23 45 0 0就会输出垃圾值。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-04-23
在while(1)循环中加上if(i >= m) break;或者直接将while(1)改成while(i < m)追问

还是出现段错误

追答

#include
#include
using namespace std;
int main()
{
int m,n,i=0,j=0,q,b[20];
double t,v,p,g=0,a[20];
cout>m>>n;
while(i >t>>v;
if(v == 0 || t == 0)
{
cout0)
{
g+=a[i]*b[i];
n-=b[i];
}
else
{
g+=n*a[i];
break;
}
i++;
}
cout<<setiosflags(ios::fixed)<<setprecision(2);
cout<<g<<endl;
}

相似回答