在线编译器 C

#include <stdio.h> int main() { const int N = 10; int A [N],i,c; int count=0; for (i=0;i<N;i++) {scanf("%d",&A[i]); } for (i=0;i<N;i++){ if ((A[i]/10)%10==0){ int B[count]=A[i] count++; } } for (i=0;i<count;i++) { printf("%d", B[i]); } return 0; }
这段代码试图从10个整数中筛选出十位数字为0的数,并存入新数组输出。但代码存在几个关键问题。

- 数组B在声明时使用了变量count作为大小,但C语言中数组大小必须是编译时常量,不能使用变量。同时,在声明B之前count的值为0,这会导致数组大小为0,是错误的。
- 第11行中,将A[i]赋值给B[count]的语句缺少分号,导致语法错误。
- 逻辑上,条件(A[i]/10)%10==0判断的是数字的十位是否为0,但需要注意负数的情况,例如-105的十位处理可能不符合预期。

- 考虑如何在不预先知道结果数量的情况下存储筛选后的元素。可以先用一个固定大小的数组(比如和原数组一样大),或者使用动态内存分配。
- 检查赋值语句的语法,确保每条语句末尾都有分号。