SCDWUHAN
2015-01-03 09:09
采纳率: 0%
浏览 1.8k

无符号数的问题,当length为0时报错

#include
float sum(float *,unsigned);
int main(int argc, char *argv[])
{
float a[5]={1,2,3,4,5};
float t=sum(a,0);
printf("t=%f\n",t);
return 0;
}

float sum(float a[],unsigned length)
{
int i;
float sum=0;
for(i=0;i<length-1;i++)
{
sum+=a[i];
}
return sum;

不知道为什么会报错
求指点
  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

5条回答 默认 最新

  • threenewbee 2015-01-03 09:12

    http://codepad.org/1DtjcmGt

    t=0.000000

     #include <stdio.h>
     float sum(float *,unsigned);
     int main(int argc, char *argv[])
     {
     float a[5]={1,2,3,4,5};
     float t=sum(a,0); 
     printf("t=%f\n",t);
     return 0;
     }
    
    float sum(float a[],unsigned int length)
     {
     int i;
     float sum=0;
     for(i=0;i<(int)length-1;i++)
     {
     sum+=a[i];
     }
     return sum;
    }
    
    评论
    解决 无用
    打赏 举报
  • threenewbee 2015-01-03 09:13

    强制转换下就可以了,不同类型编译器给出警告。
    对unsigned int作减法要特别小心,如果length是0,会下溢。

    评论
    解决 无用
    打赏 举报
  • threenewbee 2015-01-03 09:23

    http://codepad.org/5R40FMvj

    这里根本没必要减1,因为你用的是小于。

    这是正确结果,15

    评论
    解决 无用
    打赏 举报
  • autocyz 2015-01-03 09:26

    将 unsigned int length改成int length也可以。

    评论
    解决 无用
    打赏 举报
  • lx624909677 2015-01-03 11:23

    应该是会有个警告吧?错误是运行时候才出现的,unsigned类型的0-1是-1,当然错了

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题