teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

2

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

2021/06/10 04:36

投稿

wagashi_157
wagashi_157

スコア51

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 (auto i=0; i<v.size(); ++i){
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;++i){
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();++j) {
116
+ for(size_t j=i+1;j<v.size();j++) {
117
117
  /*勝敗(白星,不戦勝,黒星,不戦敗)によってvをソートする(選択ソート) */
118
- if (v[n-j-1].shiro()<v[n-max-1].shiro()) max=j;
118
+ if (v[j].shiro()>v[max].shiro()) max=j;
119
- if (v[n-j-1].shiro()==v[n-max-1].shiro())
119
+ if (v[j].shiro()==v[max].shiro())
120
- if (v[n-j-1].kuro()>v[n-max-1].kuro()) max=j;
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>>rank;
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>>name;
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>>score;
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>>aite;
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の表し方に問題がないか見直しました。また,降順に並べるnがつくという条件だったので降順に並べられるようなfor文作成しました。そして,ファイルの読み込みではそれぞれの行から出力されるようにvectorの値に注意しながらプログラムを作成しました。
204
+ クラス型のvectorの表し方に問題がないか見直しました。選択ソートの,size_t n=v.size()利用せずに表しました。そして,ファイルの読み込みではそれぞれの行から出力されるようにvectorの値に注意しながらプログラムを作成しました。行単位でファイルを読み込む際にgetline()関数を利用してプログラムを作成しました。
205
205
 
206
206
 
207
207
  ### 補足情報(FW/ツールのバージョンなど)

1

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

2021/06/10 04:36

投稿

wagashi_157
wagashi_157

スコア51

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/ツールのバージョンなど)