|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 stuian 于 2018-3-20 16:24 编辑
- # include <stdio.h>
- int main()
- {
- int ch;
- int num = 0;
-
- printf("请输入待转换的字符串:");
-
- do
- {
- ch = getchar();
- printf("%d",ch);
-
- if (ch >= '0' && ch<= '9')
- {
- num = 10*num + (ch-'0');
- printf("%d\n",num);
- }
- else
- {
- if(num)
- {
- break; //已有数字,则退出循环。
- }
- }
- }
- while (ch != '\n');
-
- printf("结果是:%d\n",num);
-
- return 0;
- }
复制代码
问题1:代码第15行if后面的条件和代码块我都懂,是用来识别0到9的数字,但是为什么num = 10*num+(ch-'0')中要10*num这个式子。
问题2:代码第20行else后面的if语句不明白是干什么的,num不是设定等于0嘛,那这个式子有什么意义?
问这个题目的我好像看到过很多次了~
先说第一个问题
为什么要乘以10,因为是十进制啊~这么说理解了一点吗~言归正传 说题~
假定 你输入了 '1' '2' '5' '8'
既然你明白了if的条件 直接说里面的
num = 10 * num + (ch - '0') 括号里面的其实是一个字符型转换到整型的
打个比方 '0'的ascii值是 48 '1'的ascii值是49, 然后我就不用说了吧~
接着看循环~
第一次: num = 10 * 0 + 1 num = 1
第二次: num = 10 * 1 + 2 num = 12
第三次: num = 10 * 12 + 5 num = 125
第四次: num = 10 * 125 + 8 num = 1258
第二个问题:
在这个循环里,不进if 就会进else,他只会进一个~
还是刚才那举例, ch是读了 '1' '2' '5' '8' '\n'
当读到'\n'的时候 是不是if就不成立了~ 那肯定就要进else
这时候else里面判断的是什么!是num! 这时候要把num看做一个逻辑值,非0即为真~
所以执行else 里面的if break 循环结束~
|
|