c语言作业while循环的一道题
(题目附了图片)if后面都有点不明白,为什么num要进行那一系列操作,后面的也不懂{:10_250:}
#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;
}
本帖最后由 jackz007 于 2022-9-16 22:09 编辑
num = 0 ;
do {
ch = getchar() ;
if (ch >= '0' && ch <= '9') {
num = 10 * num + (ch - '0') ;
} else {
if (num) break ;
}
} while(ch != '\n') ;
假如键入的是 'Abc985abc'
那么:
第1次循环:ch = 'A' (ch >= '0' && ch <= '9') 为 false 执行第 7 行 if(num) break num = 0 为false 结果,不会执行 break 语句,什么都不做
第2次循环:ch = 'b' (ch >= '0' && ch <= '9') 为 false 执行第 7 行 if(num) break num = 0 为false 结果,不会执行 break 语句,什么都不做
第3次循环:ch = 'c' (ch >= '0' && ch <= '9') 为 false 执行第 7 行 if(num) break num = 0 为false 结果,不会执行 break 语句,什么都不做
第4次循环:ch = '9' (ch >= '0' && ch <= '9') 为 true 执行第 5 行num = 10 * num + (ch - '0') = 10 * 0 + '9' - '0' = 9
第5次循环:ch = '8' (ch >= '0' && ch <= '9') 为 true 执行第 5 行num = 10 * num + (ch - '0') = 10 * 9 + '8' - '0' = 98
第6次循环:ch = '5' (ch >= '0' && ch <= '9') 为 true 执行第 5 行num = 10 * num + (ch - '0') = 10 * 98 + '5' - '0' = 985
第7次循环:ch = 'a' (ch >= '0' && ch <= '9') 为 false 执行第 7 行 if(num) break num = 985 为 true 结果,执行 break 语句,结束循环。
所以,最终,num = 985。 本帖最后由 howzyao 于 2022-9-16 23:15 编辑
你这题目很考验基础啊.
刚试了一下:
'd' -'0' == 4
116 -> 52 ==后退64个== '0' 的含义
这题除了这,我也想知道,它想表达什么道理. 楼主还是高级会员。if语句判断条件是否是数字字符,不过一楼已经写的很清楚了,如果实在不清楚就结合ASCII码表来看。 do
{
ch = getchar();
if (ch >= '0' && ch <= '9')
{
num = 10 * num + (ch - '0');
}
else
{
if (num)
{
break; // 如果已有数字,则退出循环
}
}
}
while (ch != '\n');
我说我怎么想不到呢,受到启发了,楼上的,谢谢啊
让我对着码表,再仔细想想.
页:
[1]