读书人

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

发布时间: 2012-05-07 12:40:40 作者: rapoo

关于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这个函数是又缺陷的,它对非法的字符是不做判断的

读书人网 >C语言

热点推荐