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

回答編集履歴

4

文言修正

2020/12/29 13:33

投稿

SHOMI
SHOMI

スコア4079

answer CHANGED
@@ -1,5 +1,6 @@
1
1
  `scanf`は読み取ったデータの後の区切り文字(スペースやタブ、改行、書式文字列に合わない入力)が入力バッファに残ります。
2
2
  `33`の後の改行が残っているため、`fgets`はその改行のみを読み取ってしまっています。
3
+ `33`と入力した場合は`fgets`が読み取るのは改行のみとなりわかりづらいですが、`33`の代わりに`33abc`などと入力してみればわかりやすいです。
3
4
 
4
5
  ---
5
6
  2つ目の数字の後にアルファベット等が続いていても読み捨てて良いなら以下のようにすればよいです。

3

文言修正

2020/12/29 13:33

投稿

SHOMI
SHOMI

スコア4079

answer CHANGED
@@ -1,4 +1,4 @@
1
- `scanf`は読み取ったデータの後の区切り文字が入力バッファに残ります。
1
+ `scanf`は読み取ったデータの後の区切り文字(スペースやタブ、改行、書式文字列に合わない入力)が入力バッファに残ります。
2
2
  `33`の後の改行が残っているため、`fgets`はその改行のみを読み取ってしまっています。
3
3
 
4
4
  ---

2

コード修正

2020/12/29 13:29

投稿

SHOMI
SHOMI

スコア4079

answer CHANGED
@@ -9,7 +9,7 @@
9
9
  {
10
10
 
11
11
  int a;
12
- char b[10] = {}, c[10] = {};
12
+ char b[10], c[10];
13
13
 
14
14
  printf("入力:");
15
15
  fgets(b, 10, stdin);

1

コード追記

2020/12/29 13:28

投稿

SHOMI
SHOMI

スコア4079

answer CHANGED
@@ -1,2 +1,29 @@
1
1
  `scanf`は読み取ったデータの後の区切り文字が入力バッファに残ります。
2
- `33`の後の改行が残っているため、`fgets`はその改行のみを読み取ってしまっています。
2
+ `33`の後の改行が残っているため、`fgets`はその改行のみを読み取ってしまっています。
3
+
4
+ ---
5
+ 2つ目の数字の後にアルファベット等が続いていても読み捨てて良いなら以下のようにすればよいです。
6
+ ```diff
7
+ #include <stdio.h>
8
+ int main()
9
+ {
10
+
11
+ int a;
12
+ char b[10] = {}, c[10] = {};
13
+
14
+ printf("入力:");
15
+ fgets(b, 10, stdin);
16
+ printf("%s\n", b);
17
+
18
+ printf("入力:");
19
+ scanf("%d", &a);
20
+ printf("%d\n", a);
21
+
22
+ + scanf("%*[^\n]"); // 数値入力の後の改行以外を読み捨て
23
+ + scanf("%*c"); // 改行を読み捨て
24
+
25
+ printf("入力:");
26
+ fgets(c, 10, stdin);
27
+ printf("%s\n", c);
28
+ }
29
+ ```