質問編集履歴

2

選択ソートはnを使わない方法にしました。ファイルの読み込みをgetline()関数を用いて作成しました。白星の数が多い順に表示させるのですが,同じ場合は黒星の数が少ない方を上にすることを追記しました。

2021/06/10 04:36

投稿

wagashi_157
wagashi_157

スコア51

test CHANGED
File without changes
test CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
  ### 発生している問題・エラーメッセージ
8
8
 
9
- 今,大相撲の勝敗が書かれたファイルを読み込み,勝敗を計算して成績の良い順にソートした結果のファイルを吐き出すプログラムを作成しているのですが,コンパイルできるのにも関わらず,結果を出力しようとしたらエラーが出てしまいました。どこに原因があるのか分からないので,教えてください。特にファイルの読み込み方に自信がないので宜しくお願いします。
9
+ 今,大相撲の勝敗が書かれたファイルを読み込み,勝敗を計算して成績の良い順にソートした結果のファイルを吐き出す(白星の数が同じならばそのうち黒星の数が少ない方を上に持って行く)プログラムを作成しているのですが,コンパイルできるのにも関わらず,結果を出力しようとしたらエラーが出てしまいました。以前ファイルの読み込みに関するご指摘をもとに修正したのですが,それでもSegmentation faultが表示されます。どこに原因があるのか分からないので,教えてください。特にファイルの読み込み方・クラスへの格納に自信がないので宜しくお願いします。
10
10
 
11
11
  ```
12
12
 
@@ -60,7 +60,7 @@
60
60
 
61
61
 
62
62
 
63
- ```ここに言語名を入力
63
+ ```C++
64
64
 
65
65
  #include<iostream>
66
66
 
@@ -196,7 +196,7 @@
196
196
 
197
197
  /*vにrを追加*/
198
198
 
199
- for (auto i=0; i<v.size(); ++i){
199
+ for (size_t i=0; i<v.size(); i++){
200
200
 
201
201
  v[i].set_r(r.get_r());
202
202
 
@@ -206,6 +206,8 @@
206
206
 
207
207
  v[i].set_a(r.get_a());
208
208
 
209
+ v.push_back(r);
210
+
209
211
  }
210
212
 
211
213
  }
@@ -222,21 +224,19 @@
222
224
 
223
225
  void sort(){
224
226
 
225
- size_t n=v.size();
226
-
227
- for(size_t i=0;i<v.size()-1;++i){
227
+ for(size_t i=0;i<v.size()-1;i++){
228
228
 
229
229
  size_t max{i};
230
230
 
231
- for(size_t j=i+1;j<v.size();++j) {
231
+ for(size_t j=i+1;j<v.size();j++) {
232
232
 
233
233
  /*勝敗(白星,不戦勝,黒星,不戦敗)によってvをソートする(選択ソート) */
234
234
 
235
- if (v[n-j-1].shiro()<v[n-max-1].shiro()) max=j;
235
+ if (v[j].shiro()>v[max].shiro()) max=j;
236
-
236
+
237
- if (v[n-j-1].shiro()==v[n-max-1].shiro())
237
+ if (v[j].shiro()==v[max].shiro())
238
-
238
+
239
- if (v[n-j-1].kuro()>v[n-max-1].kuro()) max=j;
239
+ if (v[j].kuro()<v[max].kuro()) max=j;
240
240
 
241
241
  }
242
242
 
@@ -318,7 +318,7 @@
318
318
 
319
319
  /*finからrankを取り出しrecordに格納*/
320
320
 
321
- fin>>rank;
321
+ getline(fin,rank);
322
322
 
323
323
  record.set_r(rank);
324
324
 
@@ -328,7 +328,7 @@
328
328
 
329
329
  /*finからnameを取り出しrecordに格納*/
330
330
 
331
- fin>>name;
331
+ getline(fin,name);
332
332
 
333
333
  record.set_n(name);
334
334
 
@@ -338,7 +338,7 @@
338
338
 
339
339
  /*finからscoreを取り出しrecordに格納. その際split関数を用いる*/
340
340
 
341
- fin>>score;
341
+ getline(fin,score);
342
342
 
343
343
  split(score,' ','\t').push_back(score);
344
344
 
@@ -352,7 +352,7 @@
352
352
 
353
353
  /*recordをtableに追加*/
354
354
 
355
- fin>>aite;
355
+ getline(fin,aite);
356
356
 
357
357
  split(aite,' ','\t').push_back(aite);
358
358
 
@@ -404,7 +404,7 @@
404
404
 
405
405
  ### 試したこと
406
406
 
407
- クラス型のvectorの表し方に問題がないか見直しました。また,降順に並べる際にnがつくという条件だったので降順並べられるようなfor文を作成しました。そして,ファイルの読み込みではそれぞれの行から出力されるようにvectorの値に注意しながらプログラムを作成しました。
407
+ クラス型のvectorの表し方に問題がないか見直しました。選択ソートの際,size_t n=v.size()を利用せずしました。そして,ファイルの読み込みではそれぞれの行から出力されるようにvectorの値に注意しながらプログラムを作成しました。行単位でファイルを読み込む際にgetline()関数を利用してプログラムを作成しました。
408
408
 
409
409
 
410
410
 

1

選択ソートはnを使えば大丈夫そうだったので,ファイルの読み込みの心配について述べました。

2021/06/10 04:36

投稿

wagashi_157
wagashi_157

スコア51

test CHANGED
File without changes
test CHANGED
@@ -1,18 +1,12 @@
1
1
  ### 前提・実現したいこと
2
2
 
3
-
4
-
5
- ここに質問の内容を詳しく書いてください。
6
-
7
- (例)PHP(CakePHP)で●●なシステムを作っています。
8
-
9
- ■■な機能実装中以下ーメッセージが発生ました。
3
+ 大相撲の勝敗が書かれたファイル読み込んで計算をし,成績の良い順ソートした結果ファイルを吐き出すプログムを作成した
10
4
 
11
5
 
12
6
 
13
7
  ### 発生している問題・エラーメッセージ
14
8
 
15
- 今,大相撲の勝敗が書かれたファイルを読み込み,勝敗を計算して成績の良い順にソートした結果のファイルを吐き出すプログラムを作成しているのですが,選択ソートが上手くいっていないからか,コンパイルできるのにも関わらず,結果を出力しようとしたらエラーが出てしまいました。どこに原因があるのか分からないので,教えてください。また,もしも選択ソート以外おかしい部分ありましたらそちらも教えてくださ宜しくお願いします。
9
+ 今,大相撲の勝敗が書かれたファイルを読み込み,勝敗を計算して成績の良い順にソートした結果のファイルを吐き出すプログラムを作成しているのですが,コンパイルできるのにも関わらず,結果を出力しようとしたらエラーが出てしまいました。どこに原因があるのか分からないので,教えてください。ファイルの読み込み方に自信ので宜しくお願いします。
16
10
 
17
11
  ```
18
12
 
@@ -410,7 +404,7 @@
410
404
 
411
405
  ### 試したこと
412
406
 
413
- クラス型のvectorの表し方に問題がないか見直しました。また,降順に並べる際にnがつくという条件だったので降順に並べられるようなfor文を作成しました。
407
+ クラス型のvectorの表し方に問題がないか見直しました。また,降順に並べる際にnがつくという条件だったので降順に並べられるようなfor文を作成しました。そして,ファイルの読み込みではそれぞれの行から出力されるようにvectorの値に注意しながらプログラムを作成しました。
414
408
 
415
409
 
416
410