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

#include <stdio.h> int compression(int a[], int b[], int N){ int count=1; int num=0; for(int i=1;1<N;i++){ if(a[i]==a[i-1]){ count++; } else{ b[num]=count; num++; count=1; } } b[num]=count; num++; return num; } int main(void) { int a[SIZE] = {0}, b[SIZE] = {0}; for (size_t i = 0; i < SIZE; i++) { scanf("%d", &a[i]); } int sizeb = compression(a, b, SIZE); printf("["); for (size_t i = 0; i < (size_t)sizeb; i++) { if (i > 0) printf(","); printf("%d", b[i]); } printf("]"); return 0; }
这段代码试图实现一个“游程编码”压缩功能:统计数组 `a` 中连续相同数字的个数,并将这些计数存入数组 `b`。但代码中存在几个问题。

- 循环条件 `1<N` 写错了,应该是 `i < N`,这导致循环根本不会执行,函数直接返回1。
- 变量 `SIZE` 没有定义,编译会报错。
- 函数 `compression` 的逻辑在遇到连续相同数字时只增加 `count`,但缺少处理数组最后一个元素后的情况,不过当前因为循环不执行,这个逻辑还没机会运行。

- 检查循环条件:`for(int i=1;1<N;i++)` 中的 `1<N` 应该改为 `i < N`,否则循环永远不会进入。
- 确保在调用函数前定义了 `SIZE`,例如在文件开头加上 `#define SIZE 10` 或类似的值。