马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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 循环结束~
|