c语言 - Malloc 不会对超过 8 个输入进行排序



我的程序需要3行输入。第一行是要按奇数还是偶数排序,第二行是数组的大小,第三行是数组中的整数。它一直有效,直到您使用大于 8 的数组。我相信这与 malloc 有关,但我已经尝试调试这段代码几个小时了,但我无法解决这个问题。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char* sort;
int n;
int* ar;
int i;
int test()
{
    int temp;
    int j = 1;
    //printf("%s", sort);
    if (strcmp(sort, "odd") == 0) {
        for (i = 0; i < n;) {
            if (j != n) {
                if (ar[i] % 2 != 0) {
                    if (ar[j] % 2 != 0) {
                        if (ar[j] < ar[i]) {
                            temp = ar[i];
                            ar[i] = ar[j];
                            ar[j] = temp;
                            j++;
                        }
                        else {
                            j++;
                        }
                    }
                    else {
                        j++;
                    }
                }
                else {
                    j++;
                    i++;
                }
            }
            else {
                i++;
                j = i + 1;
            }
        }
    }
    if (strcmp(sort, "even") == 0) {
        for (i = 0; i < n; i++) {
            if (j != n) {
                if (ar[i] % 2 == 0) {
                    if (ar[j] % 2 == 0) {
                        if (ar[j] < ar[i]) {
                            temp = ar[i];
                            ar[i] = ar[j];
                            ar[j] = temp;
                            j++;
                        }
                        else {
                            j++;
                        }
                    }
                    else {
                        j++;
                    }
                }
                else {
                    j++;
                    i++;
                }
            }
            else {
                i++;
                j = i + 1;
            }
        }
    }
}
void main()
{
    ar = malloc(sizeof(int) * n);
    sort = malloc(sizeof(char) + 1);
    printf("Enter odd or evenn");
    scanf("%s", sort);
   // printf("please input odd or evenn");
    printf("Enter the size of the array n");
    scanf("%d", &n);
    //printf("%s", sort);
    printf("Enter the elements of the array n");
    for (i = 0; i < n; i++) {
        scanf("%d", &ar[i]);
    }
    test();
    for (i = 0; i < n; i++) {
        printf("%d ", ar[i]);
    }
    // return 0;
}

代码通常以线性方式执行,但您似乎没有这样做。您正在使用 n 分配ar,但直到几行之后才有n的值......

ar = malloc(sizeof(int) * n);
sort = malloc(sizeof(char) + 1);
printf("Enter odd or evenn");
scanf("%s", sort);
// printf("please input odd or evenn");
printf("Enter the size of the array n");
scanf("%d", &n);

您也没有分配足够大的sort的大小以包含任何长度超过 1 个字符的字符串。

相关内容

  • 没有找到相关文章

最新更新