stdin
から1桁の数字を取得しようとしています。 scanf("%d",&choice);
を使用すると、3fjios
またはfjaifdj
のような数字が入力された場合、その数字の後ろにすべてが保持されるため、後でscanf("%s",name);
を受け取ると、他の文字がかかりすぎてしまいます。また、scanf
を使用すると悪いです(またはGoogleからそうだと思われます)。fgetsを使用して番号を取得し、後でstdinを消去する方法、他に何も役立たなかった
多くの掘り出しの後、私はfgets
を使用して入力を文字列に読み込んで解析する必要があることを理解しています。 しかし、!その後、バッファを適切にクリアする方法については説明しません。 私のような何かを行うのであれば:
char choice[3];
do {
fgets(choice, 3, stdin);
scanf("%*[^\n]");
scanf("%*c");//clear upto newline
} while (choice[1] != '\n');
を、これは私が長い2文字以上の文字列を入力する場合にのみ機能します。 fgets
の1つの文字を入力すると、scanf
は実際に別の入力を待っています...これは悪いです。
2つ以上の文字(数字と'\n'
)を入力すると、最初の2文字はchoice
に入り、残りはバッファにスタックされます。それをクリアするためのすべてのアプローチは、最初に原子力発電所を建設する必要があるようです... また、ユーザーが無限に長い文字列を入力するとどうなりますか?
ユーザーは、(未知の)長さの文字列を入力し、最初に正確に1桁の数字が含まれているかどうかを正しく確認してから、'\n'
を入力することができますか? 他の入力は、ユーザーからの新しい入力を再度取得するためにループバックする必要があります。 複雑なソリューションを使用しないでください。標準のシンプルなC言語のみを使用してください。
私は、おそらくユーザーからの入力を得て、この単純な技術的なことで6時間を無駄にするとは思えません。実際の問題を解決するのは簡単でした...
'fgets'を使用する必要がありますか、あるいはCで可能な解決策はありますか? – Elyasin
問題は、 '456'を入力するとコードで2番目のループの' 6'を保持するということです。 –
'%d'のscanfだけを返し、残りの値を破棄して戻り値を確認してください。 –