首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2012-03-21 
不明白,为什么当i1时数据会溢出#includeiostream#includevector#includealgorithmusingnamespacest

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

热点排行