Online Compiler C

#include <stdio.h> int main() { char c; int ch,sum=0; do{ scanf("%d",&ch); scanf("%c",&c); while(ch>0){ ch=ch/10; sum++; } }while(c!='.'); printf("%d",sum); return 0; }
这段代码试图从输入中读取整数,并计算每个整数的位数,最后输出所有位数的总和。但代码的逻辑和变量使用存在一些问题。

- 变量 `sum` 在每次读取新整数时没有被重置,导致它累加了所有整数的位数,但代码中 `sum` 的累加位置可能不符合预期。
- 内层 `while` 循环将 `ch` 不断除以10,这会改变 `ch` 的值,导致后续无法正确判断循环条件或使用原始值。你需要考虑如何在不破坏原始值的情况下计算位数。
- 外层 `do-while` 循环在读取字符 `c` 后判断是否继续,但 `scanf("%c",&c)` 可能会读取到输入中的空白字符(如空格或换行),导致循环提前结束。