#include<stdio.h>
#include<stdlib.h>
struct student
{
int num;
int age;
char name[20];
struct student *next;
};
void insert_list(student *,int );
void delete_whole(student *);
void print_list(student *);
void delete_list(student *,int);
struct student *creat()
{
struct student * head;
struct student * p,* q;
int i=0;
p=q=(struct student *)malloc(sizeof(student));
scanf_s("%d,%d,%s",&p->num,&p->age,&p->name);
head=NULL;
while (p->num!=0)
{
i++;
if(i==1)
head=p;
else
q->next=p;
q=p;
p=(struct student *)malloc(sizeof(student));
scanf_s("%d,%d,%s",&p->num,&p->age,&p->name);
}
q->next=NULL;
return head;
}
int _tmain(int argc, _TCHAR* argv[])
{
struct student *head;
int n,x,i,b;
char temp;
printf("输入数据,输入0结束\n");
head=creat();
print_list(head);
printf("\n");
printf("\n下面进行链表插入\n");
printf("\n请输入即将插入节点的位置 i=");
scanf_s("%d",&i);
insert_list(head,i);
print_list(head);
printf("\n");
printf("\n下面进行链表删除元素\n");
printf("\n请输入即将删除元素的位置:i=");
scanf_s("%d",&i);
delete_list(head,i);
print_list(head);
printf("\n");
printf("\n是否删除整个链表?Y/N\n");
fflush(stdin);
scanf_s("%c",&temp);
if('Y'==temp) //删除链表
{
delete_whole(head);
printf("\n成功删除整个链表\n");
}
}
void insert_list(student *head,int i )
{
int j=0;
struct student *p,*s;
p=head;
while((p!=NULL)&&(j<i-1))
{
p=p->next;
j++;
}
if(p==NULL) exit(0);
s=(struct student *)malloc(sizeof(student));
scanf_s("%d,%d,%s",&s->num,&s->age,&s->name);
s->next=p->next;
p->next=s;
}
void delete_list(student *head,int i)
{
struct student *p,*q;
int j=0;
p=head;
while((p!=NULL)&&(j<i-1))
{
p=p->next;
j++;
}
q=p->next;
p->next=q->next;
free(q);
q=NULL;
}
void delete_whole(student *head)
{
struct student *p,*q;
p=head;
while(p!=NULL)
{
q=p->next;
free(p);
p=q;
}
}
void print_list(student * head)
{
struct student *p;
for(p=head->next;p!=NULL;)
{
printf("%d,%d,%s",p->num,p->age,p->name);
p=p->next;
}
}
17 个解决方案
#1
就是在第25行出问题
#2
scanf_s("%d,%d,%s",&p->num,&p->age,&p->name);//这句话你是咋输入的呢
//你要1,2,abcdef这样输入噢
#3
对啊 是这样输的
#4
凡是用到
scanf_s("%d,%d,%s",&p->num,&p->age,&p->name);
//都应该改为
scanf_s("%d,%d,%s",&p->num,&p->age,p->name);
#5
没有用啊
scanf_s("%d,%d",&p->num,&p->age);//断点设在这
scanf_s("%s",p->name);//这就报错
#6
0x5336F6A4 (msvcr110d.dll) (ConsoleApplication1.exe 中)处的第一机会异常: 0xC0000005: 写入位置 0x0073D000 时发生访问冲突。
#7
name的长度超过20了没,还有,把你的输入界面截个图!
#8
还有,你查一下&和->的优先级,是在搞不清楚的话就加括号。
#9
#10
加括号没用 &去掉也木用。。
#11
p=q=(struct student *)malloc(sizeof(student));
//你打印一下sizeof(student)是多少,我觉得这样不行,应该是
p=q=(struct student *)malloc(sizeof(struct student));
#12
0
p=q=(struct student *)malloc(sizeof(struct student));这样也不行。。就是scan到char倒。。
#13
在调用时,必须提供一个数字以表明最多读取多少位字符。
scanf_s("%d,%d,%s",&p->num,&p->age,p->name, 20);
scanf_s("%d,%d,%s",&p->num,&p->age,p->name, 20);
#14
just googled scanf_s, upstairs is right!!
#15
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。
#16
+
#17
这么久了,不知道楼主还在不在,我也遇到了你这样的问题,不知道是怎么解决的
#1
就是在第25行出问题
#2
scanf_s("%d,%d,%s",&p->num,&p->age,&p->name);//这句话你是咋输入的呢
//你要1,2,abcdef这样输入噢
#3
对啊 是这样输的
#4
凡是用到
scanf_s("%d,%d,%s",&p->num,&p->age,&p->name);
//都应该改为
scanf_s("%d,%d,%s",&p->num,&p->age,p->name);
#5
没有用啊
scanf_s("%d,%d",&p->num,&p->age);//断点设在这
scanf_s("%s",p->name);//这就报错
#6
0x5336F6A4 (msvcr110d.dll) (ConsoleApplication1.exe 中)处的第一机会异常: 0xC0000005: 写入位置 0x0073D000 时发生访问冲突。
#7
name的长度超过20了没,还有,把你的输入界面截个图!
#8
还有,你查一下&和->的优先级,是在搞不清楚的话就加括号。
#9
#10
加括号没用 &去掉也木用。。
#11
p=q=(struct student *)malloc(sizeof(student));
//你打印一下sizeof(student)是多少,我觉得这样不行,应该是
p=q=(struct student *)malloc(sizeof(struct student));
#12
0
p=q=(struct student *)malloc(sizeof(struct student));这样也不行。。就是scan到char倒。。
#13
在调用时,必须提供一个数字以表明最多读取多少位字符。
scanf_s("%d,%d,%s",&p->num,&p->age,p->name, 20);
scanf_s("%d,%d,%s",&p->num,&p->age,p->name, 20);
#14
just googled scanf_s, upstairs is right!!
#15
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处。
#16
+
#17
这么久了,不知道楼主还在不在,我也遇到了你这样的问题,不知道是怎么解决的