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

回答編集履歴

2

抜かした while 行を戻した

2021/07/05 05:34

投稿

rubato6809
rubato6809

スコア1382

answer CHANGED
@@ -62,6 +62,7 @@
62
62
  すればよいのです。上記コードは次のように整理できます。
63
63
 
64
64
  ```C
65
+ while (fgets(line, LINESIZE, fp) != NULL) {
65
66
  sscanf(line, "%c %c %d:%d", &b, &io, &h, &m);
66
67
  int n = 「bが 'A'なら0, 'B'なら1, … にする」 ;
67
68
 
@@ -69,6 +70,7 @@
69
70
  case 'I': tm[n] += 60 * h + m; break;
70
71
  case 'O': tm[n] -= 60 * h + m; break;
71
72
  }
73
+ }
72
74
  ```
73
75
  配列を使えば、行数を減らすことができ、見通しが良くなったと思いませんか。ボート毎の変数を**添え字変数 n で特定できる**(`` tm[n] ``)からです。
74
76
 

1

=> を矢印(→)に書換え

2021/07/05 05:34

投稿

rubato6809
rubato6809

スコア1382

answer CHANGED
@@ -95,7 +95,7 @@
95
95
  - ボート名 b は(先頭を0番目として)"ABCDEFGHIJKLMNO" の何番目にあるか?
96
96
 
97
97
  こういうことかもしれません。例えば、boat2num() という変換関数を作っておき、
98
- ```
98
+ ```C
99
99
  int boat2num(char b)
100
100
  {
101
101
  int n;
@@ -122,9 +122,9 @@
122
122
  ```
123
123
  この一行だけで十分なのです。検算してみます。
124
124
 
125
- - b == 'A' なら 'A' - 'A' => 0 (即ち n = 0; と同じ)
125
+ - b == 'A' なら 'A' - 'A' 0 (即ち n = 0; と同じ)
126
- - b == 'B' なら 'B' - 'A' => 1 (即ち n = 1; と同じ)
126
+ - b == 'B' なら 'B' - 'A' 1 (即ち n = 1; と同じ)
127
- - b == 'C' なら 'C' - 'A' => 2 (即ち n = 2; と同じ)
127
+ - b == 'C' なら 'C' - 'A' 2 (即ち n = 2; と同じ)
128
128
 
129
129
  ・・・という具合いで、わかってしまえば、「ボート名(char b) を通し番号(int n)に変換」するやり方はいくつもある(他にもやり方はあるでしょう)ので、どうするかはあなた次第です。
130
130