質問編集履歴

1

データを削除するプログラムをネットのサイトを参考に書きましたが、途中でsegmentation faultになってしまいます。何が原因なのでしょうか。

2018/12/17 11:53

投稿

ksyiwk
ksyiwk

スコア24

test CHANGED
File without changes
test CHANGED
@@ -1,16 +1,18 @@
1
1
  C言語で、以下のプログラムを元にして、データ入力後に任意の場所にデータを追加や削除するプログラムをリスト構造を用いて作成したいのですが、どなたか教えてください。 また、データ追加後や削除後の番号も正しく表示させたいです。データの追加と削除のプログラムははそれぞれ別のソースコードで表します。
2
2
 
3
+ ```
4
+
3
- ```#include<stdio.h>
5
+ #include<stdio.h>
4
6
 
5
7
  struct Data{
6
8
 
7
- int No;
9
+ int No;
8
10
 
9
- char Name[20];
11
+ char Name[20];
10
12
 
11
- double Height;
13
+ double Height;
12
14
 
13
- double Weight;
15
+ double Weight;
14
16
 
15
17
  struct Data *next;
16
18
 
@@ -18,57 +20,81 @@
18
20
 
19
21
  int main(){
20
22
 
21
- struct Data *p;
23
+ struct Data *p,*temp;
22
24
 
23
- int i,a;
25
+ int i,a;
24
26
 
25
- p=&d[0];
27
+ p=&d[0];
26
28
 
27
- printf("Please input the number of people:");
29
+ printf("Please input the number of people:");
28
30
 
29
- scanf("%d",&a);
31
+ scanf("%d",&a);
30
32
 
31
- for(i=0;i<a;i++){
33
+ for(i=0;i<a;i++){
32
34
 
33
- printf("No,%d name : ",i+1);
35
+ printf("No,%d name : ",i+1);
34
36
 
35
- scanf("%s",d[i].Name);
37
+ d[i].No=i+1;
36
38
 
37
- printf("height : ");
39
+ scanf("%s",d[i].Name);
38
40
 
39
- scanf("%lf",&d[i].Height);
41
+ printf("height : ");
40
42
 
41
- printf("weight : ");
43
+ scanf("%lf",&d[i].Height);
42
44
 
43
- scanf("%lf",&d[i].Weight);
45
+ printf("weight : ");
44
46
 
45
- if(i==a-1){
47
+ scanf("%lf",&d[i].Weight);
46
48
 
47
- d[i].next = NULL;
49
+ if(i==a-1){
48
50
 
49
- }else{
51
+ d[i].next = NULL;
50
52
 
53
+ }else{
54
+
51
- d[i].next = &d[i+1];
55
+ d[i].next = &d[i+1];
56
+
57
+ }
52
58
 
53
59
  }
54
60
 
55
- p->No=(int)i+1;
61
+ p=&d[0];
56
-
57
- }
58
-
59
-
60
62
 
61
63
  while(p!=NULL){
62
64
 
63
65
 
64
66
 
65
- printf("No,%d : %s\n",p->No,p->Name);
67
+ printf("No,%d : %s\n",p->No,p->Name);
66
68
 
67
- printf("%.1f[cm] %.1f[kg]\n",p->Height,p->Weight);
69
+ printf("%.1f[cm] %.1f[kg]\n",p->Height,p->Weight);
68
70
 
69
- p=p->next;
71
+ p=p->next;
70
72
 
71
73
  }
74
+
75
+ printf("Delete data-\n");
76
+
77
+ printf("Please select delete data number:");
78
+
79
+ scanf("%d",&b);
80
+
81
+ while( p->next != NULL && p->next->No != b) p = p->next;
82
+
83
+ if( p->next == NULL ) return;
84
+
85
+ temp = p->next;
86
+
87
+ p->next = temp->next;
88
+
89
+ while(p!=NULL){
90
+
91
+ printf("No,%d : %s\n",p->No,p->Name);
92
+
93
+ printf("%.1f[cm] %.1f[kg]\n",p->Height,p->Weight);
94
+
95
+ p=p->next;
96
+
97
+ }
72
98
 
73
99
  }
74
100