不明白,为什么当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--)
都可以。