#include <stdio.h>
#include <stdlib.h>
#define N 10000
typedef struct link seqlist;
struct link {
int size;
int data[N];
};
void spilit(seqlist a1,seqlist *a2,seqlist *a3);
int main() {
int i;
seqlist a1,*a2,*a3;
spilit(a1,a2,a3);
for(int j=0; j<a2->size; j++) {
printf("%d",a2->data[j]);
printf("\n");
}
for(int k=0; k<a3->size; k++) {
printf("%d",a2->data[k]);
printf("\n");
}
return 0;
}
void spilit(seqlist a1,seqlist *a2,seqlist *a3) {
int i,j=0,k=0;
printf("请输入a1数据\n");
for(i=0; i<5; i++) {
scanf("%d",&a1.data[i]);
}
for(i=0; i<5; i++) {
if((a1.data[i])%2!=0) {
a2->data[j]=a1.data[i];
j++;
} else if((a1.data[i])%2==0) {
a3->data[k]=a1.data[i];
k++;
} else
break;
}
a2->size=j;
a3->size=k;
}
为什么没法运行啊
参考GPT和自己的思路:
您好!根据您提供的代码,可以发现问题出在没有为顺序表a2和a3分配内存,所以在对它们进行操作时,会发生未知错误。您需要在spilit函数中添加以下语句以分配内存:
a2 = (seqlist*)malloc(sizeof(seqlist));
a3 = (seqlist*)malloc(sizeof(seqlist));
同时,为防止内存泄漏,需要在最后释放内存:
free(a2);
free(a3);
另外,您在测试函数中声明了a2、a3为指针类型,但没有初始化,所以需要在main函数中添加以下语句以初始化:
a2 = (seqlist*)malloc(sizeof(seqlist));
a3 = (seqlist*)malloc(sizeof(seqlist));
a2->size = 0;
a3->size = 0;
最后,您在print语句中输出a2和a3时,发现输出结果都是a2的内容,这是因为您的代码中print语句中输出a3时,写错了变量名,应该为a3->data[k]。
下面是经过调整后的代码,希望可以帮到您:
#include <stdio.h>
#include <stdlib.h>
#define N 10000
typedef struct link seqlist;
struct link {
int size;
int data[N];
};
void spilit(seqlist a1, seqlist* a2, seqlist* a3);
int main() {
int i;
seqlist a1, *a2, *a3;
a2 = (seqlist*)malloc(sizeof(seqlist));
a3 = (seqlist*)malloc(sizeof(seqlist));
a2->size = 0;
a3->size = 0;
spilit(a1, a2, a3);
printf("奇数部分:\n");
for (int j = 0; j < a2->size; j++) {
printf("%d\n", a2->data[j]);
}
printf("偶数部分:\n");
for (int k = 0; k < a3->size; k++) {
printf("%d\n", a3->data[k]);
}
free(a2);
free(a3);
return 0;
}
void spilit(seqlist a1, seqlist* a2, seqlist* a3) {
int i, j = 0, k = 0;
printf("请输入a1数据\n");
for (i = 0; i < 5; i++) {
scanf_s("%d", &a1.data[i], sizeof(int));
}
for (i = 0; i < 5; i++) {
if ((a1.data[i]) % 2 != 0) {
a2->data[j] = a1.data[i];
j++;
}
else if ((a1.data[i]) % 2 == 0) {
a3->data[k] = a1.data[i];
k++;
}
else break;
}
a2->size = j;
a3->size = k;
}
希望可以帮到您,如有疑问欢迎再次向我提问。
#include <stdio.h>
#include <stdlib.h>
#define N 10000
typedef struct link seqlist;
struct link {
int size;
int data[N];
};
void spilit(seqlist a1,seqlist *a2,seqlist *a3);
int main() {
int i;
seqlist a1,a2,a3;
spilit(a1,&a2,&a3);
for(int j=0; j<a2.size; j++) {
printf("%d",a2.data[j]);
printf("\n");
}
for(int k=0; k<a3.size; k++) {
printf("%d",a2.data[k]);
printf("\n");
}
return 0;
}
void spilit(seqlist a1,seqlist *a2,seqlist *a3) {
int i,j=0,k=0;
printf("请输入a1数据\n");
for(i=0; i<5; i++) {
scanf("%d",&a1.data[i]);
}
for(i=0; i<5; i++) {
if((a1.data[i])%2!=0) {
a2->data[j]=a1.data[i];
j++;
} else if((a1.data[i])%2==0) {
a3->data[k]=a1.data[i];
k++;
} else
break;
}
a2->size=j;
a3->size=k;
}
seqlist a1,*a2,*a3;
这里a2 a3没有分配空间啊
参考GPT和自己的思路:
你的程序无法运行的原因是在main函数中,你没有为a2和a3分配内存空间。在函数调用spilit(a1,a2,a3)之前,你需要分配内存空间,可以使用malloc函数为a2和a3动态分配内存空间。所以你可以在main函数中添加以下两行代码:
a2 = (seqlist*)malloc(sizeof(seqlist));
a3 = (seqlist*)malloc(sizeof(seqlist));
这样就为a2和a3分配了内存空间,才能正常运行函数spilit。另外,你的程序中存在一些小问题,比如遍历数组的循环条件应该是i<a1.size,而不是i<5;最后两个for循环打印a2和a3的值时,输出a2->data[k]的时候应该改成a3->data[k],这些小问题需要你自己根据上下文进行修改。