本帖最后由 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。