S1E13课后作业求解答
#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;
}
其中 num = 10 * num + (ch - '0'); 和 if (num) 代码是什么意思 求各位大神解答。 num = 10 * num + (ch - '0'); 先计算括号里面的,将字符串ch转换实际的数值,将先输入的数值乘以10加上后输入的数值就是你输入的数字实际数值了,比如你输入56,先被处理的是5,(ch - '0')这一句计算出你的字符就是数字5,这个你看下ASCII数码表就知道,不懂再问我,num原本为0,处理后num就是5,然后再处理6,最后num的值就是5*10+6就是56了
if (num) 在编程语言中,非0的值就是True,所以当计算出num有实际的值而且非0就会进入这个if条件
lumber2388779 发表于 2017-4-16 11:04
num = 10 * num + (ch - '0'); 先计算括号里面的,将字符串ch转换实际的数值,将先输入的数值乘以10加上后 ...
大神还是不明白, 这代码是大小字母转换 这句代码起到怎么样的作用,还有num为什么=10*num+(ch-'0')才能实现大小写字母转换 15917579239 发表于 2017-4-16 23:39
大神还是不明白, 这代码是大小字母转换 这句代码起到怎么样的作用,还有num为什么=10*num+(ch-'0')才能 ...
这是数字的转换不是大小写字母的转换,ch-'0'就是实现转换成实际数字的,因为当你输入的用getchar()获取回来的一定是一个字符,而数字0-9字符ASCII中的值是48-57,当你ch-'0'就是你的数字对应的ASCII码的值减去48即0的ASCII的值,得出来刚好就是对应数字字符的值举个栗子,比如ch是'9' 那么ch-'0'就是57-48 结果就是9
getchar()这个函数是每次只获取一个字符,当你输入的是一个两位数,会先分别获取你的十位数,再获取你的个位数,比如我输入48,先获取十位数, num = 10 * num + (ch - '0'); num初始值为0,那么num= ('4'-'0'),num结果就是就是4,然后再获取个位数,这个时候num为4那么 num = 10* 4 + ('8'-'0')得出来就是48了
你自己一步一步画个图看一下就能懂
页:
[1]