Онлайн компилятор C

#include <stdio.h> int main() { int n,a[10]; scanf("%d", &n); for(int i=9;n>0;i--){ a[i]=n%10; n/=10; } for(int i=0;i<10;i++){ if(a[i])printf("%d ",a[i]); } return 0; }
这段代码试图将一个整数按位拆分并输出每一位数字。它从数组末尾开始存储数字,然后从开头输出非零元素。

- 数组 `a` 的大小固定为10,但你没有记录实际存储了多少位数字。当输入的数字位数少于10位时,数组前面的元素未被初始化,可能包含随机值。你的输出循环遍历整个数组,只跳过值为0的元素,但未初始化的元素可能不是0,导致输出多余的数字。

- 存储数字的循环从 `i=9` 开始递减,但你没有在循环结束后记录 `i` 的值。输出时你不知道实际存储的起始位置,导致无法正确控制输出范围。