S1E13 作业求助
求问下面作业代码中num = 10 * num + (ch - '0'); 为什么ch-'0'?#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;
}
我想这题的意义应该是教怎样将字符型中的数字转为整形,ch应该定义为char ch;而不是int ch呗,再试试看能不能想通。 int ch 没错,因为ch接收的是getchar()函数 你最终结果输出的是以num整一个变量输出的,所以就要设计千位百位十位个位这些问题。假如你输入的是123,那么问题来了,getchar()只能接收单个字符,那他怎么接收123呢?
我们来一步一步分析:首先输入1,分析你有问题的那一句:num = 10 * 0 +(1的ASCII码减去0的ASCII码)
你去找一找ASCII码,把他代入到式子里就会发现,最后num得出的结果是1。因为(ch - '0')这一条实际上是ASCII码的运算。变量里面的运算都是用ASCII码来运算的,而不是拿你输入的变量来进行运算的。
第二步:当你输入2时 num = 10 * 1 +(2的ASCII码减去0的ASCII码)这里10*1的作用就是把1从个位提升到十位,当你把(ch - '0')这一步算完,即2的ASCII码减去0的ASCII码,得出2,最终就变成num = 10 + 2
那不就变成12了吗?
第三步就和第二步一样的
所以最终就变成了1为百位,2为十位,3为个位
页:
[1]