新人小白求助
#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;
}
整体的代码都基本理解,就是不知道如何把其它字符过滤掉的。
例如:输入A9,结果是:9
num=10*0(59-48)
num=9
这个10*num 有什么特殊的含义吗?
还有其它字符是怎样过滤掉的。是哪一块的代码起到过滤效果的; 1. if (ch >= '0' && ch <= '9'): 这里把除了数字之外的字符给过滤掉了
2. num = 10 * num + (ch - '0'); 这里 ch - '0' 就是将输入的数字字符减掉‘0’得到真正的数字值。num = 10*num +..是从左往右数字值,例如'a1b2',得到的就是数值num为12,作为%d类型输出。 alexw_h264 发表于 2020-2-10 18:29
1. if (ch >= '0' && ch
if (ch >= '0' && ch <= '9'): 例如CH = G1G,它会直接把数字以外都过滤掉的话,它是逐个判定然后过滤掉吗?
num = 10 * num + (ch - '0'); 这个我就是不太理解10*num,另外你说的输入a1b2,会得到12,不知道为啥我的是直接舍弃掉后面的,只得到1, 1. 对,从左往右,依次过滤
2. 嗯,结果是1,不是12。因为对1处理之后,num值为1了,再对b字母处理时,因为if条件不成立,所以走的是下面的else分支,然后因为if(num)是条件成立的,所以就退出while循环了。结果输出为1 对于a1b2这种输入,要完整的输出数字12,可以修改成下面的程序
#include <stdio.h>
int main()
{
int ch;
int num = 0;
int i = 0;
char str;
printf("请输入待转换的字符串:");
scanf("%s", str);
do
{
ch = str;
if (ch >= '0' && ch <= '9')
{
num = 10 * num + (ch - '0');
}
/*else
{
if (num)
{
break; // 如果已有数字,则退出循环
}
}*/
i++;
}
while (ch != '\0');
printf("结果是:%d\n", num);
return 0;
}
页:
[1]