mamaaini 发表于 2023-11-19 11:16:07

输出负数

isdkz 发表于 2023-11-19 11:16:16

#include <stdio.h>
int main() {
    int N, i, j, temp;
    scanf("%d", &N);
    int a;
    for (i = 0; i < N; i++) {
      scanf("%d", &a[ i]);
    }
    for (i = 0; i < N - 1; i++) {
      for (j = 0; j < N - i - 1; j++) {
            if (a > a) {
                temp = a;
                a = a;
                a = temp;
            }
      }
    }
    for (i = 0; i < N; i++) {
      printf("%d ", a[ i]);
    }
    printf("\n");
    return 0;
}


这段代码有几个问题。首先,C语言中不允许使用变量来定义数组的长度,因此 int a 是错误的。其次, a 和 a 也是不合法的数组定义。正确的做法是使用动态内存分配或者固定大小的数组。另外,为了避免数组越界,应该确保在使用 scanf 函数时不会超出数组界限。最后,为了完善代码的健壮性,应该添加对输入数据的有效性检查。

Mike_python小 发表于 2023-11-19 11:16:25

在C语言中,数组的长度必须是一个常量表达式,而不是一个变量。因此,你不能这样定义一个大小由用户输入决定的数组。如果你需要一个大小可变的数组,可以使用动态内存分配函数malloc来实现。

下面是一个使用malloc函数动态分配数组内存并按顺序输出的示例:


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

int compare(const void *a, const void *b) {
    return (*(int*)a - *(int*)b);
}

int main() {
    int N, i;
    int *a;

    printf("请输入N的值:");
    scanf("%d", &N);

    // 分配内存空间
    a = (int *)malloc(N * sizeof(int));

    // 读取输入
    printf("请输入%d个数:", N);
    for (i = 0; i < N; i++) {
      scanf("%d", &a);
    }

    // 排序
    qsort(a, N, sizeof(int), compare);

    // 输出结果
    printf("从小到大的顺序输出:");
    for (i = 0; i < N; i++) {
      printf("%d ", a);
    }
    printf("\n");

    // 释放内存
    free(a);

    return 0;
}


这段代码首先使用malloc函数动态分配了一个大小为N的整型数组,然后使用qsort函数进行排序,最后输出排序后的结果。希望这能够帮助到你。

陶远航 发表于 2023-11-19 11:56:43

???

tommyyu 发表于 2023-11-19 12:05:30

陶远航 发表于 2023-11-19 11:56
???

话说密码贴是怎么读到内容的

陶远航 发表于 2023-11-19 13:04:29

tommyyu 发表于 2023-11-19 12:05
话说密码贴是怎么读到内容的

不知道,我没看见
页: [1]
查看完整版本: 输出负数