啊,看不懂小甲鱼写的代码QAQ
别说了,又是看不懂代码系列,这是个要求将字符串中的值解析为对应的整型数字的程序就是类似 atoi 函数的函数#include <stdio.h>
int main()
{
int ch;
int num = 0;
printf("请输入待转换的字符串:");
do
{
ch = getchar();
if (ch >= '0' && ch <= '9')//从这里开始我就开始懵逼了为什么这样?
{
num = 10 * num + (ch - '0');//这为什么要*10还要+(ch-'0')?
}
else
{
if (num)
{
break; // 如果已有数字,则退出循环
}
}
}
while (ch != '\n');
printf("结果是:%d\n", num);
return 0;
} if (ch >= '0' && ch <= '9')//从这里开始我就开始懵逼了为什么这样?
因为要转换的字符必须是数字0-9才行
num = 10 * num + (ch - '0');//这为什么要*10还要+(ch-'0')?
因为是从高位依次转换,所以每转换一位要将其位置往高位移动一位,所以 *10
后面的ch-'0'得到的是一个int类型的数值,直接和前面的结果相加,放到个位的位置上 BngThea 发表于 2019-1-24 12:32
if (ch >= '0' && ch
if (ch >= '0' && ch <= '9')//这个东西是从个位开始看的还是说从小数点之后看的?
num = 10 * num + (ch - '0');//这为什么要*10还要+(ch-'0')?//你说的意思是将小数点后面的数字*10然后加到个位???
漫漫C仔 发表于 2019-1-25 09:00
if (ch >= '0' && ch
你自己先试试画出这段代码的流程图看看 if (ch >= '0' && ch <= '9')//从这里开始我就开始懵逼了为什么这样?
{
num = 10 * num + (ch - '0');//这为什么要*10还要+(ch-'0')?
}
直接拷贝你的 代码 来解释这段代码的意思
if判断 输入的 ch 变量 是否 大于等于0 以及小于等于 9 通俗的说判断变量 ch是否为数字
下面的 num的话 就是 把输入的 ch 变量转换成int 格式 建议你可以去查查ascii 码表 漫漫C仔 发表于 2019-1-25 09:00
if (ch >= '0' && ch
首先从“if (ch >= '0' && ch <= '9')//这个东西是从个位开始看的还是说从小数点之后看的?”说起:
明确答复:不是的,这个和小数点没有关系。这个是判断你输入的字符串中的每一个字符是否是0-9之间的整型数字。
在开始之前,建议你先打开一个asiic码对照表。然后再看下面的解释:
因为你输入的字符,ch = getchar();获得的ch值是字符的ASII码的对应的进制值。
建议你先把代码修改如下:
#include <stdio.h>
int main()
{
int ch;
int num = 0;
printf("请输入待转换的字符串:");
do
{
ch = getchar();
printf("十进制值为%d\n",ch); //加入这句代码,是为了你更好理解ch的值到底是什么
if (ch >= '0' && ch <= '9')//从这里开始我就开始懵逼了为什么这样?
{
num = 10 * num + (ch - '0');//这为什么要*10还要+(ch-'0')?
}
else
{
if (num)
{
break; // 如果已有数字,则退出循环
}
}
}
while (ch != '\n');
printf("结果是:%d\n", num);
return 0;
}
上面的这段代码,我们在ch = getchar();下,增加了
printf("十进制值为%d\n",ch); //加入这句代码,是为了你更好理解ch的值到底是什么
。
好,我们编译执行,输入待转换的字符串为123,我们回车后,会发现输出:
请输入待转换的字符串:123
十进制值为49
十进制值为50
十进制值为51
十进制值为10
结果是:123
十进制值为49为数字1;十进制值为50为数字2,十进制值为51为数字3。
十进制值为10是你的回车换行。
那么好,相信你看到这里,明白为什么 (ch - '0')了。
(ch - '0'),'0'的十进制是48,所以用(ch - '0'),就如当ch是1时,49-48获得了真实的对应数字1。
好,接下来的问题就很简单了:
如果我们输入的字符串是“123”;那么我们在do...while循环中,第一次ch=49,num = 10 * num + (ch - '0');这句话得到的值是
num = 10 * 0 + (49 - 48);
这时,num=1;这时的num是个位
第二次循环,如果我们再遇到输入的是数字,上面循环的num就应该成为十位了;第三次循环就应该成为百位了。所以要每次循环,遇到数字都乘以10。
如果不明白,继续跟帖。 行客 发表于 2019-1-26 07:58
首先从“if (ch >= '0' && ch
那么就是说它是按一个个数字来进行循环的是吗?
页:
[1]