因为写入访问权限受阻而无法成功输入数据。之前曾经写过另外一个方法,那个方法是将首指针也存入了数据,但是我将输入的数据即时输出(即读入)时是正确的,后面进行交换却是错的,因此重新写了一份,也就是这一份,首指针为空不存入数据,输入后后面交换时数值时正确的(调试),但是一到后面就不对了,查了csdn的相关类似问题,结果就是大部分都是数组越界,但是我检查了逻辑,确实是写一个就加一个,应该不可能越界,其他答案也无法解决我的问题。想要一份通俗易懂些的答案,之前都没接触过链表,实在是搞不明白到底哪里错了。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
# define WHY printf("***\n");
#pragma warning (disable:4996)
typedef struct ren//创建结构体
{
char n[20];
char sex;
int cg;
struct ren* next;
}STU;
STU* create()
{
STU* head;
head = (STU*)malloc(sizeof(STU));
head->next = NULL;
return head;
}
void new(STU* qH, int* c){
STU * q = qH,*qb;
printf("请输入数据\n");
STU* p = (STU*)malloc(sizeof(STU));
if (NULL == p)
{
printf("malloc error!\n");
return NULL;
}
printf("成绩:\t");
scanf("%d", &(p->cg));
printf("成绩\t\n");
printf("%d\t\n", p->cg);
p->next = NULL;
(*c)++;
int n, i;
if ((*c) == 1)
{
q->next = p;//报错处
p->next = NULL;
}
else {
while (NULL != q->next)
{
q = q->next;
}
p->next = q->next;
q->next = p;
}
}
void main()
{
int count = 0, a = 1, * c;
c = &count;
struct ren* q = create;
while (a)//重复使用
{
int a;
printf("输入1添加新学生\n ");
scanf("%d", &a);
switch (a)
{
case 1:new(q, c); break;//计数几个人
case 6:break;
}
}
}
以上是实际使用的部分代码
以上是结果