读书人

不明白为什么当i=1时数据会溢出解决

发布时间: 2012-03-21 13:33:15 作者: rapoo

不明白,为什么当i=1时数据会溢出
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main()
{

vector <int> number;
int x;

while (cin> > x)
{number.push_back(x);}


typedef vector <int> ::size_type vec_sz;
vec_sz size =number.size();

//检查number是否为空
if (size == 0)
{
cout < <endl < < "You must enter some numbers.Please try again. " < <endl;
return 1;
}

//检查输入的数字个数是否为4的倍数
if (size < 4)
{
int remainder;
remainder=4-size;
cout < <endl < < "Please enter " < <remainder < < " more numbers. ";

return 1;
}
else if (size % 4 !=0)
{
int remainder;
remainder=size % 4;
cout < <endl < < "Please enter " < <remainder < < " more numbers. ";

return 1;
}


//对成绩进行排序
sort (number.begin(),number.end());
//输出程序
for (int i = 4;i > 0 ; i--)
{
for (int n =size/4*i-1;n > size/4*(i-1)-1 ; n--)
{cout < <number[n] < <endl;
}
}

return 0;

}

[解决办法]
for (int i = 4;i > 0 ; i--)
{
for (int n =size/4*i-1;n > size/4*(i-1)-1 ; n--)
{
cout < <number[n] < <endl;
}
}
出现以上原因是 n > size/4*(i-1)-1 表达式 size/4*(i-1)-1的类型没有确定,当i= 1时,size/4*(i-1)-1的值不一定为-1;

建议改成如下:
for (int i = 4;i > 0 ; i--)
{
int stop = size/ 4*(i-1) -1;
for (int n =size/4*i-1;n > stop ; n--)
{
cout < <number[n] < <endl;
}
}
或者
for (int n =size/4*i-1;n > (int)(size/4*(i-1)-1) ; n--)
都可以。

读书人网 >C++

热点推荐