質問編集履歴

2

説明箇所がわからないという指摘をもとに、編集しました。

2023/07/18 08:20

投稿

albertadam
albertadam

スコア11

test CHANGED
File without changes
test CHANGED
@@ -21,6 +21,8 @@
21
21
  10文字以下の入力の場合は、そのままプリントされます。
22
22
  10文字以上の入力の場合は、10番目以降の文字を読み捨てられる。
23
23
 
24
+ ## なぜソースコードにscanfがあるのか
25
+ ご指摘いただいた内容です。
24
26
  バッファに残っていないことを確認するために、scanfを置いておき、
25
27
  ・何もせずに入力を受け取っていたら、バッファに文字が残っており、
26
28
  ・入力待ち状態になったら、バッファに文字が残っていないことがわかるようになっています。

1

調査したこと・試したことの記載を行いました。

2023/07/18 08:01

投稿

albertadam
albertadam

スコア11

test CHANGED
@@ -1 +1 @@
1
- C言語コードレビュー:バッファに残った文字を読み飛ばす。文字数以上の入力がされてもバグりたくない。
1
+ C言語コードレビュー:バッファに残った文字を読み飛ばす。
test CHANGED
@@ -1,3 +1,14 @@
1
+ ## 調査したこと・試したこと
2
+ fgets, scanf, getcharの三つの入力として使われる関数をもとに、決められた文字数だけをデータとして持ち、それ以上の入力は読み飛ばして、バッファの中身を空にするということを行ってきました。
3
+
4
+ じゃあなぜgetcharを投稿したのかというと、今後入力した文字列に条件(半角のみとか)をつける際に、一文字ずつ受け取って、判定して、次の文字を受け取って、判定して、、、、を繰り返した方が、正確に情報を読み取り、バグが少ないと考えたからです。
5
+
6
+ ただ自分で解答した通り、scanfで文字数を指定して、入力できることを知り、受け取った後にバッファを読み飛ばせばいいことに気づきました。
7
+
8
+ scanfの方法ではfgetsができないことがわかっています。fgetsは\nも読み取ってしまうので、while(getchar()!=''\n);の記述をしてしまうと、while文での入力待ちが発生してしまいます。scanfは\nを読み取らないので、質問解答に記載した方法が最良なのではないかと考えます。
9
+
10
+ 皆様の意見をお聞かせ下さい。
11
+
1
12
  ## テーマ、知りたいこと
2
13
  記事に載せましたコードのレビューをお願いしたいです。
3
14
  また改善策などありましたら、コメントのほどお願いします。