在这段代码中,没有明确指定数组的长度,这是不合法的。在C语言中,数组的长度必须是一个常量表达式。

你可以使用动态内存分配来解决这个问题,或者使用一个足够大的数组来存储输入的值。

以下是使用动态内存分配的修复代码:

#include <stdio.h>
#include <stdlib.h>

int main() {
  int n = 0;
  int i = 0;
  int key_count = 0;

  scanf("%d", &n);
  int* num = (int*)malloc(n * sizeof(int));
  int* Ca = (int*)malloc(100 * sizeof(int));
  int* key = (int*)malloc(100 * sizeof(int));

  for (i = 0; i < n; i++) {
    scanf("%d", &num[i]);
    int buf = num[i];
    int count = 0;

    while (buf != 1) {
      if (buf % 2 == 0) {
        buf = buf / 2;
        Ca[count] = buf;
        count++;
      } else {
        buf = (3 * buf + 1) / 2;
        Ca[count] = buf;
        count++;
      }
    }

    int sign = 0; // 重置 sign 的值

    for (int j = 0; j < count; j++) {
      int compare = Ca[j];

      for (int k = 0; k < n; k++) {
        if (compare == num[k]) {
          sign++;
        }
      }
    }

    if (sign == (n - 1)) {
      key[key_count] = num[i];
      key_count++;
    }
  }

  for (int m = 0; m < key_count; m++) {
    printf("%d ", key[m]);
  }

  free(num);
  free(Ca);
  free(key);

  return 0;
}

请注意,使用动态内存分配后,需要在程序结束时使用free()函数来释放已分配的内存

#include stdiohint main int n = 0; int i = 0; int key_count = 0; scanfd &n; int numn; int Ca100; int key100; for i = 0; i n; i++ scanfd &numi; int buf = numi; int count = 0; whi

原文地址: https://www.cveoy.top/t/topic/ijMU 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录