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

回答編集履歴

1

コメントに対する回答を追加

2020/02/26 15:44

投稿

kazuma-s
kazuma-s

スコア8222

answer CHANGED
@@ -2,4 +2,30 @@
2
2
  scanf("%d", &co); を scanf(" %c", &co); にしてください。
3
3
  " %c" の中のスペースは重要です。
4
4
  これがなくて "%c" ではどうなるか試してみて
5
- なぜそうなるのかを調べてみてください。
5
+ なぜそうなるのかを調べてみてください。
6
+
7
+
8
+ *追記*
9
+ > 3名の方が回答してくださったやり方をまとめて、やってみたのですが、文字を入力する部分で入力待ちがされなくて正常に実行されませんでした。
10
+
11
+ まとめてやってはいけません。別々にやったらどうなりますか?
12
+
13
+ > そこで、getchar();をscanf(" %c", &co); の前に追加することも行った結果、正常に実行されました!
14
+
15
+ scanf(" %c", &co); の前に getchar(); は不要です。
16
+
17
+ > 正常に実行されなかった理由はscanf("%s", str);の処理後、stdin(標準入力)に[Enter](char型である?)が残ったままであったので、[Enter](char型である?)がscanf(" %c", &co);に入ってしまったためと考えました。
18
+
19
+ scanf("%c", &co); なら co に '\n' が入りますが、
20
+ scanf(" %c", &co); なら co に '\n' は入りません。
21
+ %c の前のスペースが '\n' を読み飛ばすので、co には [Enter] の後の文字が入ります。
22
+
23
+ > <<これがなくて "%c" ではどうなるか試してみて
24
+ なぜそうなるのかを調べてみてください。>>については
25
+ %dですと'a'',b'',c'などの文字を入力すると、その文字のコード(数値)がcoに入力されてしまい、(s[i] == c)が文字と数値の比較になってしまうため、-1が返却値になってしまうと考えました。
26
+
27
+ int co; scanf("%d", &co); で a や b の文字を入力すると、
28
+ それらは数字ではないので、co に数値は入りません。
29
+ int co; scanf("%d", &co); で 97 や 98 を入力すると、
30
+ co にはそれらの数値が入り、それらは 'a' や 'b' のコードの値なので
31
+ 文字を探すことができます。