我的程序需要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 个字符的字符串。