質問編集履歴
2
選択ソートはnを使わない方法にしました。ファイルの読み込みをgetline()関数を用いて作成しました。白星の数が多い順に表示させるのですが,同じ場合は黒星の数が少ない方を上にすることを追記しました。
title
CHANGED
File without changes
|
body
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
大相撲の勝敗が書かれたファイルを読み込んで計算をし,成績の良い順にソートした結果のファイルを吐き出すプログラムを作成したい。
|
3
3
|
|
4
4
|
### 発生している問題・エラーメッセージ
|
5
|
-
今,大相撲の勝敗が書かれたファイルを読み込み,勝敗を計算して成績の良い順にソートした結果のファイルを吐き出すプログラムを作成しているのですが,コンパイルできるのにも関わらず,結果を出力しようとしたらエラーが出てしまいました。どこに原因があるのか分からないので,教えてください。特にファイルの読み込み方に自信がないので宜しくお願いします。
|
5
|
+
今,大相撲の勝敗が書かれたファイルを読み込み,勝敗を計算して成績の良い順にソートした結果のファイルを吐き出す(白星の数が同じならばそのうち黒星の数が少ない方を上に持って行く)プログラムを作成しているのですが,コンパイルできるのにも関わらず,結果を出力しようとしたらエラーが出てしまいました。以前ファイルの読み込みに関するご指摘をもとに修正したのですが,それでもSegmentation faultが表示されます。どこに原因があるのか分からないので,教えてください。特にファイルの読み込み方・クラスへの格納に自信がないので宜しくお願いします。
|
6
6
|
```
|
7
7
|
Segmentation fault
|
8
8
|
```
|
@@ -29,7 +29,7 @@
|
|
29
29
|
|
30
30
|
### 該当のソースコード
|
31
31
|
|
32
|
-
```
|
32
|
+
```C++
|
33
33
|
#include<iostream>
|
34
34
|
#include<fstream>
|
35
35
|
#include<vector>
|
@@ -97,11 +97,12 @@
|
|
97
97
|
public:
|
98
98
|
void add(Record r){
|
99
99
|
/*vにrを追加*/
|
100
|
-
for (
|
100
|
+
for (size_t i=0; i<v.size(); i++){
|
101
101
|
v[i].set_r(r.get_r());
|
102
102
|
v[i].set_n(r.get_n());
|
103
103
|
v[i].set_s(r.get_s());
|
104
104
|
v[i].set_a(r.get_a());
|
105
|
+
v.push_back(r);
|
105
106
|
}
|
106
107
|
}
|
107
108
|
void print(){
|
@@ -110,14 +111,13 @@
|
|
110
111
|
}
|
111
112
|
}
|
112
113
|
void sort(){
|
113
|
-
size_t n=v.size();
|
114
|
-
for(size_t i=0;i<v.size()-1;++
|
114
|
+
for(size_t i=0;i<v.size()-1;i++){
|
115
115
|
size_t max{i};
|
116
|
-
for(size_t j=i+1;j<v.size();++
|
116
|
+
for(size_t j=i+1;j<v.size();j++) {
|
117
117
|
/*勝敗(白星,不戦勝,黒星,不戦敗)によってvをソートする(選択ソート) */
|
118
|
-
if (v[
|
118
|
+
if (v[j].shiro()>v[max].shiro()) max=j;
|
119
|
-
if (v[
|
119
|
+
if (v[j].shiro()==v[max].shiro())
|
120
|
-
if (v[
|
120
|
+
if (v[j].kuro()<v[max].kuro()) max=j;
|
121
121
|
}
|
122
122
|
std::swap(v[i],v[max]);
|
123
123
|
}
|
@@ -158,24 +158,24 @@
|
|
158
158
|
while(fin){
|
159
159
|
if(n%5==0){
|
160
160
|
/*finからrankを取り出しrecordに格納*/
|
161
|
-
fin
|
161
|
+
getline(fin,rank);
|
162
162
|
record.set_r(rank);
|
163
163
|
}
|
164
164
|
else if(n%5==1){
|
165
165
|
/*finからnameを取り出しrecordに格納*/
|
166
|
-
fin
|
166
|
+
getline(fin,name);
|
167
167
|
record.set_n(name);
|
168
168
|
}
|
169
169
|
else if(n%5==2){
|
170
170
|
/*finからscoreを取り出しrecordに格納. その際split関数を用いる*/
|
171
|
-
fin
|
171
|
+
getline(fin,score);
|
172
172
|
split(score,' ','\t').push_back(score);
|
173
173
|
record.set_s(split(score,' ','\t'));
|
174
174
|
}
|
175
175
|
else if(n%5==3){
|
176
176
|
/*finからaiteを取り出しrecordに格納.その際split関数を用いる*/
|
177
177
|
/*recordをtableに追加*/
|
178
|
-
fin
|
178
|
+
getline(fin,aite);
|
179
179
|
split(aite,' ','\t').push_back(aite);
|
180
180
|
record.set_a(split(aite,' ','\t'));
|
181
181
|
table.add(record);
|
@@ -201,7 +201,7 @@
|
|
201
201
|
```
|
202
202
|
|
203
203
|
### 試したこと
|
204
|
-
クラス型のvectorの表し方に問題がないか見直しました。
|
204
|
+
クラス型のvectorの表し方に問題がないか見直しました。選択ソートの際,size_t n=v.size()を利用せずに表しました。そして,ファイルの読み込みではそれぞれの行から出力されるようにvectorの値に注意しながらプログラムを作成しました。行単位でファイルを読み込む際にgetline()関数を利用してプログラムを作成しました。
|
205
205
|
|
206
206
|
|
207
207
|
### 補足情報(FW/ツールのバージョンなど)
|
1
選択ソートはnを使えば大丈夫そうだったので,ファイルの読み込みの心配について述べました。
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,11 +1,8 @@
|
|
1
1
|
### 前提・実現したいこと
|
2
|
+
大相撲の勝敗が書かれたファイルを読み込んで計算をし,成績の良い順にソートした結果のファイルを吐き出すプログラムを作成したい。
|
2
3
|
|
3
|
-
ここに質問の内容を詳しく書いてください。
|
4
|
-
(例)PHP(CakePHP)で●●なシステムを作っています。
|
5
|
-
■■な機能を実装中に以下のエラーメッセージが発生しました。
|
6
|
-
|
7
4
|
### 発生している問題・エラーメッセージ
|
8
|
-
今,大相撲の勝敗が書かれたファイルを読み込み,勝敗を計算して成績の良い順にソートした結果のファイルを吐き出すプログラムを作成しているのですが,
|
5
|
+
今,大相撲の勝敗が書かれたファイルを読み込み,勝敗を計算して成績の良い順にソートした結果のファイルを吐き出すプログラムを作成しているのですが,コンパイルできるのにも関わらず,結果を出力しようとしたらエラーが出てしまいました。どこに原因があるのか分からないので,教えてください。特にファイルの読み込み方に自信がないので宜しくお願いします。
|
9
6
|
```
|
10
7
|
Segmentation fault
|
11
8
|
```
|
@@ -204,7 +201,7 @@
|
|
204
201
|
```
|
205
202
|
|
206
203
|
### 試したこと
|
207
|
-
クラス型のvectorの表し方に問題がないか見直しました。また,降順に並べる際にnがつくという条件だったので降順に並べられるようなfor文を作成しました。
|
204
|
+
クラス型のvectorの表し方に問題がないか見直しました。また,降順に並べる際にnがつくという条件だったので降順に並べられるようなfor文を作成しました。そして,ファイルの読み込みではそれぞれの行から出力されるようにvectorの値に注意しながらプログラムを作成しました。
|
208
205
|
|
209
206
|
|
210
207
|
### 補足情報(FW/ツールのバージョンなど)
|