while语句课后作业问题
问题是C 语言中有个 atoi 函数(定义于 <stdlib.h> 头文件中),用于将字符串中的值解析为对应的整型数字。现在要求我们自己写一个程序,实现类似的功能。答案 #include <stdio.h>
int main()
{
int ch;
int num = 0;
printf("请输入待转换的字符串:");
do
{
ch = getchar();
if (ch >= '0' && ch <= '9')
{
num = 10 * num + (ch - '0');
}
else
{
if (num)
{
break; // 如果已有数字,则退出循环
}
}
}
while (ch != '\n');
printf("结果是:%d\n", num);
return 0;
}
答案里面if里num = 10* num + (ch - '0')是什么意思啊? 例如: ch = '2'时 10* num + (ch - '0')=10 * 0 + (ch的assic码 - '0') ch的ASCII码是32H而'0'的ASCII码是30H 32H - 30H =2 所以 10 * 0 + (2)=0+2 = 2 如果不知道什么是ASCII码请百度 windows 发表于 2019-11-27 21:57
例如: ch = '2'时 10* num + (ch - '0')=10 * 0 + (ch的assic码 - '0') ch的ASCII码是32H而'0 ...
我的问题就是 为什么要 10*num+(ch - '0') 不能直接用 ch - '0' 而是要在前面加一个10*num wx_T23d31O2 发表于 2019-11-27 23:23
我的问题就是 为什么要 10*num+(ch - '0') 不能直接用 ch - '0' 而是要在前面加一个10*num
你咋想的,直接用ch-'0'那不是每次把num覆盖了,那你输入字符串都是输出一个数,并没有达到效果啊
每次*10是把ch-'0'的值给num的个位数。 wx_T23d31O2 发表于 2019-11-27 23:23
我的问题就是 为什么要 10*num+(ch - '0') 不能直接用 ch - '0' 而是要在前面加一个10*num
比如你输入15,ch=getchar(),会先读取1,运行一遍循环,在读取5,在运行一遍循环。 wx_T23d31O2 发表于 2019-11-27 23:23
我的问题就是 为什么要 10*num+(ch - '0') 不能直接用 ch - '0' 而是要在前面加一个10*num
懂了 *10就是为了往高位进1位保留下来然后再读取下一个数 对吧
页:
[1]