跪求大神给分析一下以下代码
下面是小甲鱼写的一段实现 atoi 函数的代码,看的不是很懂,有大神给详细注释一下吗?#include <stdio.h>
int main()
{
int ch;
int num = 0;
printf("请输入待转换的字符串:");
do
{
ch = getchar();
if (ch >= '0' && ch <= '9')
{
num = 10 * num + (ch - '0'); //首先是这里 10 *num 是什么意思,按理说10 * 0 不还是0吗?为什么多此一举
}
else
{
if (num)//其次是这里,if(num) 什么意思没看懂,if(0)?为什么这样写?
{
break; // 如果已有数字,则退出循环
}
}
}
while (ch != '\n');
printf("结果是:%d\n", num);
return 0;
}
有大神的路过的话希望能详细的把每一行的注释都给写一下,在下感激不尽!在此先行谢过了 我不是大神,但就这个代码来说还是略微懂点
首先咱们要明白 atoi 这个函数到底是干嘛用的,详情参考小甲鱼函数快查 atoi 函数的介绍
好的,咱们入正题,首先提示用户输入一个待转换的字符串,这里咱们假设输入字符 ‘1’ ‘2’ ‘3’吧
然后进入循环,getchar先读取一个,也就是读取字符1,然后把这个字符1赋值给整形变量ch,也就是说
把字符1的ascii码给了ch,因为ch是整形嘛,不能存放字符1,然后继续进入if,判断ch里面这个东西
是不是一个有效数字,既然是1,那肯定是有效数字,进入if,关键就在于这个进入if之后,咱们最后输出
是按照一个整形输出的,什么意思?就是直接输出123,那现在只有一个1,23都还没有呢,这里运用了一个
很巧妙的方法,让num每次都乘以10,当然了,第一次进入if的话,是10 * 0,等于还是0,运算完的话
num 是等于1的,但下一次等2进来的时候就不一样了,表达式变成了 num = 10 * 1 + (ch - ‘0’),
运算的结果num = 12,再进入一次就是 num = 10 * 12 + (ch - ‘0’),num就得到了我们最终想要的结果
字符123成功的变成了整形123,然后if(num)这里是保证了循环退出的条件,当接受的不再是有效数字
并且num里面已经有值得话就退出循环了 首先。。看清楚代码。。这是一个do while循环,num不一定是0。。
然后接下来就好理解了
num = 10 * num + (ch - '0'); //首先是这里 10 *num 是什么意思,按理说10 * 0 不还是0吗?为什么多此一举
这是左移一位,然后把char里的数字添加到个位
if (num)//其次是这里,if(num) 什么意思没看懂,if(0)?为什么这样写?
{
break; // 如果已有数字,则退出循环
}
,现在读取的char不是数字了,如果num为0,说明还没有读取数字,就继续读取下一位,
如果num不为0,说明已经读取完毕,直接跳出循环
页:
[1]