Online Compiler C

#include <stdio.h> int main() { long long int m; int q=0; scanf("%lld", &m); int save = m; while (m>0) { m /= 10; q++; } int A[q] = {0}; long long int m =save; while (m>0 ) { int i = 4 ; A[i] = m%10; i--; } for(int i = 0 ; i < q; i++) { printf("%d ",A[i]); } return 0; }
这段代码试图将一个整数按位拆分成数组并打印,但存在几个问题。

代码中声明了两个同名的变量 `m`,一个在开头是 `long long int`,后面又用 `int m` 重新声明,这会导致编译错误。另外,数组 `A` 的大小使用了变量 `q`,这在标准C中是不允许的(除非使用变长数组,但需要编译器支持)。还有,在第二个循环中,`i` 被固定为4,而不是从正确的位置开始,这样只会反复修改同一个数组元素。

- 检查变量命名:不能在同一作用域内声明两个同名变量 `m`。你需要区分原始输入值和用于循环的临时变量。
- 思考数组索引:第二个循环中,`i` 每次都被重置为4,而不是从0或 `q-1` 开始递减。你需要让 `i` 从数组末尾开始,每次循环递减,才能正确存储每一位数字。