[C / C++] いくつかありますscanfの文字列を使用してチェックイン?
本当に、そのタイトルを書くべき彼女のためらいを知らないこの記事を書いたときにどのような… “あなたには、いくつかがあると入力した数値を確認してください” 少し面白がっ@@行い、テストと呼ばれています, または “Cの数を確認してください” – この記事の目的のためだけでなく多くの標準ではありません. そして最後のscanfによってに入るの目的のために上記のように置くことにしました番号かどうかが存在しなければならないことがすぐに知ることができます.
以下のプログラムは、整数を入力する必要がありません (int型), あなたは間違った番号を入力した場合 (任意のフォーマット文字列かどうか “12DABC”, “ABC123”, でも実数 12.3) それは再入力を開始します.
#include <stdio.h> #include <stdlib.h> int clean_stdin() { while (getchar() != 'n') { } return 1; } int main(void) { int input; char c; do { printf("Enter an integer: "); } while (((scanf("%d%c", &input, &c) != 2 || c != 'n') && clean_stdin())); printf("done, number is %d", input); return 0; }
自分で少し説明:
scanf関数(“%dは%cの”, &入力, &℃)
このコマンドは、整数とすぐにこの整数を次の文字に入るために私たちを可能にし、それは整数値を返します。 – それが受ける可変量 (スイープ) 書式文字列内のフォーマットに従うこと.
– あなたが入力した場合 ABC 、関数は値を返します。 0 それが一致する値を読み取ることができないので、.
– あなたが入力した場合 123 押し 入る 戻り値は 2 すなわち 2 値の形式で受け付け, 123 %dと%cを入力してください.
– あなたが入力した場合 123ABC 押し 入る 戻り値は 2 すなわち 2 値の形式で受け付け, 123 %dと%cのキャラクタA.
scanf関数(“%dは%cの”, &入力, &℃) != 2 || ℃ != 'N’
これは、データ量がscanf関数をスキャンしなかったことを確実にします 2 または文字は入力しないで受信しました. あなたが番号を入力する必要がない場合は、マシンを遵守することができるようにしばらくこの条件を入れて、すぐにリピートを入力します.
(scanf関数(“%dは%cの”, &入力, &℃) != 2 || ℃ != 'N') && clean_stdin()
顎 clean_stdin() 関数は常に値を返します。 1 (それは常に正しいです) それは、バッファのヴィラを削除しています (標準入力) 読み取ることによって、全体の文字をバッファに残し (その入力フォーマットを読み取ることができないのscanf文字) 読者は、文字を入力するまで、. whileループ条件でそれを置くことはあなたが間違っを入力するたびに次回もで提供するためにキャッシュを拭きます.
記事は、内のコメントを参照することができます stackoverflow.com
Bài của bạn rất hay. Nhưng có một chổ mình vẫn không rỏ là tại sao lại có điều kiện scanf != 2. Mình thử bỏ nó đi chỉ có c != ‘\n’ thì nó vẫn chạy. Cám ơn vì sự trả lời. 🙂
Hàm scanf sẽ trả về 1 入力変数の数に相当する数, そのように入力します。 2 匹敵する数 2
cảm ơn tác giả nhé ^^
anh có thể giải thích rõ hơn về hoạt động hàm clean_stdin() そうではありません
Nó sẽ xóa bộ nhớ đệm input nhé.