num = 10 * num + (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
{
break;//如果有数字,则退出循环
}
}
while (ch != '\n');
printf("结果是: %d\n", num);
return 0;
} 本帖最后由 jackz007 于 2021-12-5 00:39 编辑
int num = 0;
printf("请输入待转换的字符串;");
do
{
ch =getchar();
if(ch >= '0' && ch<= '9')
{
num = 10 * num + (ch - '0');
}
else
{
break;//如果有数字,则退出循环
}
} while (ch != '\n') ;
假设先后键入了 '9'、'3'、'5'、'\n'
那么,这个 while 将会循环 4 次。
【第1次】:num = 0 , ch ='9' , num = 10 * num + (ch - '0') = 10 *0 + ('9' - '0') = 9
【第2次】:num = 9 , ch ='3' , num = 10 * num + (ch - '0') = 10 *9 + ('3' - '0') =93
【第3次】:num = 93, ch ='5' , num = 10 * num + (ch - '0') = 10 * 93 + ('5' - '0') = 935
【第4次】:num = 935 , ch = '\n' , 退出循环
这样,'9'、'3'、'5' 就被变成了 935,是不是很神奇? #include <stdio.h>
int main()
{
int c, num = 0;
printf("请输入待转换的字符串:");
while((c = getchar()) != '\n') num = (num*10) + (c -'0');
printf("结果是:%d", num);
return 0;
} getchar() 用于读取缓冲区字符(ASCII 字符)
ASCII 基本编码为 125,加上 EASCII 共 256,键盘上所有键上的符号都一一对应自己的 ASCII 编码,如:'K' 为 75、'&' 为 38,当然数字 0 至 9 也有属于自己的 ASCII 编码,如:'4' 为 52、'7' 为 55(注:这里的 4 和 7 是以 getchar() 方式取得,形态是字符,不是整数,所以才有 ASCII 编码,如果用 scanf() 可以以 %c 取得字符)
假设 C = 'a':
字符 'a' 对应 ASCII 编码为 97
字符 'A' 对应 ASCII 编码为 65
那么如何将 C 值变成 'A' 呢(也就是 'a' 变成 'A')?
解答:C = C - 'a' + 'A',也就是 'a' - 'a' + 'A' = 97 - 97 + 65 = 65('A') 傻眼貓咪 发表于 2021-12-5 10:48
好神奇呀{:10_257:}
页:
[1]