链表问题,插入节点为什么程序无法正常退出?

sinat_41822458 2018-03-27 07:15:34
创建一个包含学生学号、姓名、性别、年龄的链表,插入新节点时为什么无法正常退出?

#include <stdio.h>
#include<stdlib.h>
#include <string.h>

typedef struct _node{
char number[20];
char name[10];
char sex; /*f for female, m for male*/
int age;
struct _node *next;
}Node;
typedef struct _list{
Node* head;
}List;

void add(List* pList, Node student);
void print(List *pList);

int main(int argc, char const *argv[])
{
Node *head = NULL;
List list;
int c;
Node students;
char number[20];

list.head = NULL;
while(1){
scanf("%s", students.number);
if(students.number[0] == '0'){
break;
}
scanf(" %s %c %d",students.name, &students.sex, &students.age);
students.next = NULL;
add(&list, students);
}
print(&list);

scanf("%s\n", number);
Node students1;
Node *p;
Node *q;
int isfound = 0;
for( q = NULL, p = list.head; p ; q = p, p = p -> next){
if(p -> number == students.number){ // 若存在则删除这个结点
isfound = 1;
if(q){
q -> next = p -> next;
}else{
list.head = p ->next;
}
free(p);
break;
}
if(isfound == 0){ //这个学号不存在,则创建新的节点
strcpy(students1.number, number);
scanf("%s %c %d",students1.name, &students1.sex, &students1.age);
students.next = NULL;
add(&list, students1);
break;
}
else if(number[0] == '0'){
break;
}
}



return 0;
}

void add(List* pList, Node student)
{
//add to linked-list
Node *p = (Node*)malloc(sizeof(Node));
*p = student;
//find the last
Node *last = pList -> head;
if(last){
while(last -> next){
last = last -> next;
}
//attach
last -> next = p;
}else{
pList -> head = p;
}
}

void print(List *pList){
Node *p;
for(p = pList -> head; p; p = p -> next){
printf("%s %s %c %d\n",p -> number, p -> name, p -> sex, p -> age);
}
printf("\n");
}
...全文
582 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
自信男孩 2018-04-02
  • 打赏
  • 举报
回复
引用 6 楼 sinat_41822458 的回复:
[quote=引用 5 楼 cfjtaishan 的回复:] [quote=引用 4 楼 sinat_41822458 的回复:] [quote=引用 1 楼 cfjtaishan 的回复:]
scanf("%s\n", number);
这句改一下,去掉'\n'
scanf("%s", number);
改过之后再试一下是不是就可以正常运行了。
之前也可以运行的,按您说的改了一下,没发现有什么不同。[/quote] 有没有试试,能正常运行了吗? 建议试一下[/quote] 试过了,没发现有什么不一样,还是没法退出[/quote] 你怎么测试的?我这儿可以正常退出。第一个while(1)循环你需要看一下break的条件是'0',即需要输入number时,输入一个0即回车就可以退出。下面的再输入一个number就可以退出了。另外number的比较不可以直接,因为number是字符数组,建议使用strcmp
sinat_41822458 2018-03-31
  • 打赏
  • 举报
回复
引用 5 楼 cfjtaishan 的回复:
[quote=引用 4 楼 sinat_41822458 的回复:] [quote=引用 1 楼 cfjtaishan 的回复:]
scanf("%s\n", number);
这句改一下,去掉'\n'
scanf("%s", number);
改过之后再试一下是不是就可以正常运行了。
之前也可以运行的,按您说的改了一下,没发现有什么不同。[/quote] 有没有试试,能正常运行了吗? 建议试一下[/quote] 试过了,没发现有什么不一样,还是没法退出
自信男孩 2018-03-30
  • 打赏
  • 举报
回复
引用 4 楼 sinat_41822458 的回复:
[quote=引用 1 楼 cfjtaishan 的回复:]
scanf("%s\n", number);
这句改一下,去掉'\n'
scanf("%s", number);
改过之后再试一下是不是就可以正常运行了。
之前也可以运行的,按您说的改了一下,没发现有什么不同。[/quote] 有没有试试,能正常运行了吗? 建议试一下
sinat_41822458 2018-03-30
  • 打赏
  • 举报
回复
引用 1 楼 cfjtaishan 的回复:
scanf("%s\n", number);
这句改一下,去掉'\n'
scanf("%s", number);
改过之后再试一下是不是就可以正常运行了。
之前也可以运行的,按您说的改了一下,没发现有什么不同。
天外怪魔 2018-03-29
  • 打赏
  • 举报
回复
引用 1 楼 cfjtaishan 的回复:
scanf("%s\n", number);
这句改一下,去掉'\n'
scanf("%s", number);
改过之后再试一下是不是就可以正常运行了。
可以用这个方法试一下。
赵4老师 2018-03-28
  • 打赏
  • 举报
回复
数据结构对单链表进行数据排序 http://bbs.csdn.net/topics/392201633
自信男孩 2018-03-28
  • 打赏
  • 举报
回复
scanf("%s\n", number);
这句改一下,去掉'\n'
scanf("%s", number);
改过之后再试一下是不是就可以正常运行了。

33,321

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧