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

回答編集履歴

2

コードのバグ修正

2020/05/24 15:53

投稿

kazuma-s
kazuma-s

スコア8222

answer CHANGED
@@ -31,9 +31,14 @@
31
31
  {
32
32
  int b, c = 0, count = 0;
33
33
  while (b = c, (c = getchar()) != EOF)
34
- if (b == '/' && c == '*')
34
+ if (b == '/' && c == '*') {
35
+ c = 0;
35
36
  while (b = c, (c = getchar()) != EOF)
36
- if (b == '*' && c == '/') { count++; break; }
37
+ if (b == '*' && c == '/') { count++; c = 0; break; }
38
+ }
37
39
  printf("%d\n", count);
38
40
  }
39
- ```
41
+ ```
42
+ **追記**
43
+ /*/ をコメントの開始と終了と解釈し、
44
+ */* をコメントの終了と開始と解釈するバグがあったので、修正しました。

1

別解の追加

2020/05/24 15:53

投稿

kazuma-s
kazuma-s

スコア8222

answer CHANGED
@@ -19,4 +19,21 @@
19
19
  if ((c = getchar()) == '*') count += comment();
20
20
  printf("%d\n", count);
21
21
  }
22
+ ```
23
+
24
+ **別解**
25
+ コメントの開始と終了が 2文字なので面倒なんですね。
26
+ だったら、2文字同時に比較すればよいでしょう。
27
+ ```C
28
+ #include <stdio.h>
29
+
30
+ int main(void)
31
+ {
32
+ int b, c = 0, count = 0;
33
+ while (b = c, (c = getchar()) != EOF)
34
+ if (b == '/' && c == '*')
35
+ while (b = c, (c = getchar()) != EOF)
36
+ if (b == '*' && c == '/') { count++; break; }
37
+ printf("%d\n", count);
38
+ }
22
39
  ```