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

回答編集履歴

2

追記2

2019/10/26 22:56

投稿

thkana
thkana

スコア7735

answer CHANGED
@@ -3,7 +3,7 @@
3
3
  とりあえず、インデントをちゃんとするだけで何かが解決するような気がします。
4
4
 
5
5
  ---
6
- 以下追記。
6
+ 以下追記。質問のプログラムのインデントをつけなおしました。
7
7
 
8
8
  ```C
9
9
  #include <stdio.h>

1

追記

2019/10/26 22:56

投稿

thkana
thkana

スコア7735

answer CHANGED
@@ -1,3 +1,41 @@
1
1
  RCってなに? 競技プログラミング用語は知ってて当然なのかな?
2
2
 
3
- とりあえず、インデントをちゃんとするだけで何かが解決するような気がします。
3
+ とりあえず、インデントをちゃんとするだけで何かが解決するような気がします。
4
+
5
+ ---
6
+ 以下追記。
7
+
8
+ ```C
9
+ #include <stdio.h>
10
+ #include <string.h>
11
+ int main() {
12
+ char W[11], T[1001];
13
+ int count = 0, i;
14
+ scanf("%s", W);
15
+ while (scanf("%s", T) && strcmp(T, "END_OF_TEXT") != 0) {
16
+ for (i = 0; i < strlen(W); i++) {
17
+ if (W[i] >= 'A' && W[i] <= 'A') {
18
+ W[i] += 32;
19
+ }
20
+ if (strcmp(W, T) == 0)
21
+ count++;
22
+ }
23
+ printf("%d\n", count);
24
+ return 0;
25
+ }
26
+ }
27
+ ```
28
+ 概ね、{ }の中身は一段回「深い」位置に書く、というのが原則です(一部、{ }によらないものもあります。そのへんは文法的な理由によります)。対応する{と}は、同じ桁になります。手でやってもいいですが、エディタに自動整形機能があればそれに任せれば概ねやってくれると思いますし、その方が確実。
29
+
30
+ インデントをちゃんとつけると、while,for,if、また今回はありませんがswitch文や構造体定義などの適用範囲がわかりやすくなります。また、場合によっては{や}の付け忘れ、付け過ぎに気がつくこともあるでしょう。これがインデントの効果です。 {を行末に付けるか、新しい行に持ってくるかというのはあなたの好きにすればいい(チームで作るプログラムならチームの方針に合わせる)ことです。
31
+
32
+ そうすると、
33
+ ・一度だけ処理すればいいはずのWの小文字化のループがTの処理ループに含まれてしまって何度も行われている
34
+ ・単語毎に処理すればいいはずの文字列比較がWの小文字化ループに含まれてしまって文字を調べる毎に行われている
35
+ ・最終結果の表示と、プログラム全体を終わらせるreturnが単語毎の処理のループに含まれてしまっているので単語一つ調べるとプログラムが終わる
36
+ なんていう誤りが見つけやすくなるでしょう。
37
+
38
+ > Wrong answerと勘違いしていました・・・
39
+
40
+ 勘違いが主題じゃなくて、競技プログラミングの世界だけの略語をなんの注もなく書いていることを気にしています。WAと言ったらWrong Answerだ、というのがソフトウェアの世界一般に知られていて、お前が無知なだけだ、あるいは、競技プログラミングを知らないなら口を出すな、という意味であえて解説なしで書いているのならそれはそれですが。
41
+ それと、問題に入出力例が書いてあるのですから、提出する前にその入力を与えて同じ出力が出るかどうかぐらい自分の手元で確認するものじゃないのですか?