[問題] 連結串列的問題 (存取錯誤)
( *[1m *[m 為色碼,可以按 Ctrl+V 預覽會顯示的顏色 )
( 未必需要依照此格式,文章條理清楚即可 )
遇到的問題: (題意請描述清楚)
當資料輸入進去時要進行刪除或是顯事都會發生存取錯誤。
希望得到的正確結果:
當執行刪除時會把串列的最後一筆資料刪除,顯示時會把輸入的所有資料顯示出來。
程式跑出來的錯誤結果:
存取錯誤
開發平台: (例: VC++ or gcc/g++ or Dev-C++, Windows or Linux)
Dev-C++
有問題的code: (請善用置底文標色功能)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void add();
void del();
void pri();
struct student{
char name[30];
double score;
struct student *next;
};
struct student *ptr,*current,*preu,*head;
int main()
{
int i;
do{
printf("\n1.加入資料(前端)\n");
printf("2.刪除資料(後端)\n");
printf("3.顯示資料\n");
printf("4.結束程式\n");
printf("請輸入欲執行動作的編號:");
scanf("%d",&i);
switch(i)
{
case 1: add();
break;
case 2: del();
break;
case 3: pri();
break;
case 4: exit(0);
}
}while(1);
system("PAUSE");
return 0;
}
void add() //將資料加入前端
{
head=(struct student *)malloc(sizeof(struct student));
ptr=(struct student *)malloc(sizeof(struct student));
printf("請輸入姓名:");
scanf("%s",ptr->name);
printf("請輸入成績:");
scanf("%lf",&ptr->score);
ptr->next=head->next;
head->next=ptr;
}
void del() //將資料的尾端刪除
{
current = ptr;
if (current == NULL)
printf("無資料\n");
else
{
current=head->next;
while (current != NULL)
{
preu=current;
current=current->next;
}
printf("已刪除%s的資料\n",current->name);
preu->next=NULL;
free(current);
}
}
void pri() //顯示所輸入的資料
{
current = ptr;
if (current == NULL)
printf("無資料\n");
while(current != NULL )
{
printf("%s的成績%3.2f\n", current->name , current->score);
current = current->next;
}
}
補充說明:
不好意思 麻煩大家了!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.44.80.202
推
06/04 22:14, , 1F
06/04 22:14, 1F
推
06/04 22:21, , 2F
06/04 22:21, 2F
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章