运行 时 C 程序突然结束的原因(没有错误)
Reasons for a C program to end all of a sudden while running (with no errors)
我正在使用单链表做一个学生记录管理器。我做了9个函数。
- 用于收集数据
- 用于在开始处插入
- 用于最后插入
- 用于在给定的卷号之后插入
- 用于在开始时删除
- 最后删除
- 用于删除具有给定卷号的学生
- 用于显示记录
- 主要功能
除 2 外一切正常(尽管它正常工作但未提供预期的输出)。
当我执行功能 2 然后执行 8 时,会出现此问题。
//Below is the 2nd function
void insert_after_rollno(void){
int key,flag=0;
struct student* ptr=start,*temp;
printf("\nEnter the roll no to insert a student after that roll no :");
scanf("%d",&key);
while(ptr->next!=NULL){
if(ptr->rollno==key){
flag=1;
ptr->next=temp;
struct student* newnode;
newnode=collect_data(newnode);
ptr->next=newnode;
newnode->next=temp;
break;
}
ptr=ptr->next;
}
if (ptr->next==NULL && ptr->rollno==key){
flag=1;
ptr->next=temp;
struct student* newnode;
newnode=collect_data(newnode);
ptr->next=newnode;
newnode->next=temp;
}
if (flag==0)
printf("Invalid roll no");
}
//Below is the 8th function
void display(){//verified
struct student* ptr=start;
printf("\nRollno\tName\t\tMark1\tMark2");
while(ptr!=NULL){
printf("\n%d\t%s\t\t%.2f\t%.2f",ptr->rollno,ptr->name,ptr->marks[0],ptr->marks[1]);
ptr=ptr->next;
}
}
您收到错误的原因是因为您最初将 ptr->next 分配为 temp 而不是逻辑上您应该将 ptr->next 存储在 temp 。
制作
ptr->next=temp;
到 temp = ptr->next
if(ptr->rollno==key){
flag=1;
ptr->next=temp; // Why are you assigning temp here it should be temp = ptr->next
struct student* newnode;
newnode=collect_data(newnode);
ptr->next=newnode;
newnode->next=temp; ///
break;
}
我正在使用单链表做一个学生记录管理器。我做了9个函数。
- 用于收集数据
- 用于在开始处插入
- 用于最后插入
- 用于在给定的卷号之后插入
- 用于在开始时删除
- 最后删除
- 用于删除具有给定卷号的学生
- 用于显示记录
- 主要功能
除 2 外一切正常(尽管它正常工作但未提供预期的输出)。 当我执行功能 2 然后执行 8 时,会出现此问题。
//Below is the 2nd function
void insert_after_rollno(void){
int key,flag=0;
struct student* ptr=start,*temp;
printf("\nEnter the roll no to insert a student after that roll no :");
scanf("%d",&key);
while(ptr->next!=NULL){
if(ptr->rollno==key){
flag=1;
ptr->next=temp;
struct student* newnode;
newnode=collect_data(newnode);
ptr->next=newnode;
newnode->next=temp;
break;
}
ptr=ptr->next;
}
if (ptr->next==NULL && ptr->rollno==key){
flag=1;
ptr->next=temp;
struct student* newnode;
newnode=collect_data(newnode);
ptr->next=newnode;
newnode->next=temp;
}
if (flag==0)
printf("Invalid roll no");
}
//Below is the 8th function
void display(){//verified
struct student* ptr=start;
printf("\nRollno\tName\t\tMark1\tMark2");
while(ptr!=NULL){
printf("\n%d\t%s\t\t%.2f\t%.2f",ptr->rollno,ptr->name,ptr->marks[0],ptr->marks[1]);
ptr=ptr->next;
}
}
您收到错误的原因是因为您最初将 ptr->next 分配为 temp 而不是逻辑上您应该将 ptr->next 存储在 temp 。
制作
ptr->next=temp;
到 temp = ptr->next
if(ptr->rollno==key){
flag=1;
ptr->next=temp; // Why are you assigning temp here it should be temp = ptr->next
struct student* newnode;
newnode=collect_data(newnode);
ptr->next=newnode;
newnode->next=temp; ///
break;
}