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

关于atoi的有关问题,请高手们指教

2012-05-07 
关于atoi的问题,请高手们指教!我是新手,关于atoi的问题请指教,谢谢!int atoi(char *s){int sign1,m0if(

关于atoi的问题,请高手们指教!
我是新手,关于atoi的问题请指教,谢谢!

int atoi(char *s) 

{ int sign=1,m=0; 

  if(*s=='+'||*s=='-') /*判断是否有符号*/

  sign=(*s++=='+')?1:-1; /*用到三目运算符*/ 

  while(*s!='\0') /*对每一个字符进行操作*/ 

  { m=m*10+(*s-'0');

  s++; /*指向下一个字符*/ 

  } 

  return m*sign; 
}
我的问题是:1.第一句红色的语句中的有无符号是什么意思?是判断字符串里是否有“+”/“-”吗?
  2.下面红色语句是的(*s-'0')计算结果是按整数算的吗?还是和前面的m*10计算后才按整数算的?

[解决办法]
第一句是判断正负号,第二个地方是以整数的,所以atoi这个函数是又缺陷的,它对非法的字符是不做判断的
[解决办法]
if(*s=='+'||*s=='-') /*判断是否有符号*/ 

sign=(*s++=='+')?1:-1; /*用到三目运算符*/

这两个语句就是用来判断输入的是正还是负的问题!!!
[解决办法]
单步调试和设断点调试是程序员必须掌握的技能之一。

[解决办法]
关于跳过 整形 前面的正负号 可使用 sprintf 试一试


sprintf(str, "%d", x > 0 ? x : -x);
[解决办法]
if(*s=='+'||*s=='-') /*判断是否有符号*/ 正数?负数

 m=m*10+(*s-'0'); // ascii 码转换 十进制数字
[解决办法]

探讨

第一句是判断正负号,第二个地方是以整数的,所以atoi这个函数是又缺陷的,它对非法的字符是不做判断的

热点排行