は、私は、コード、私は私がに入力された4つの以上の文字を持っている場合、バッファをクリアされ、ここでテストしようとしています何クリーニング標準入力バッファの問題
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
int main() {
char choice;
char name[5] = "";
do {
printf("a = new name or anything else to quit\nChoice: ");
choice = getchar();
//not doing any error handling....assuming you only click 'a'
switch (choice) {
case 'a':
getchar();
printf("Enter a name which is 4 characters or less: ");
fgets(name, 5, stdin);
printf("Name: %s\n", name);
char c;
while ((c = getchar()) != '\n' && c != EOF);
printf("%c", c);
c = '\0';
break;
default:
break;
}
} while (choice == 'a');
printf("Ending.....press enter now");
getchar();
return 0;
}
の以下の部分を持っていると言います。私は4文字以上の名前を持つたびにうまく動作しますが、3文字以下の文字を入力すると、問題はwhileループになります。それはstdinバッファからgetchar()が必要ですが、これは空です。この問題を回避するには、どのような方法がありますか?
私は本当にしないでください何を求めているのか理解していますが、getchar()はcharではなくintを返します。あなたは、最大5文字を取得した後に改行を探しているようですが、これは大丈夫ですが、fgetsを使用しているためgetchar()の代わりにfgetcを使用し、何らかの理由でgetchar()が同じバッファをfgets()として実行すると、すべてのベットはオフになります。また、fgetsは文字列を終わらせる必要がないので、5の代わりに4を渡し、name [4] = '\ 0'を設定したいと思うかもしれません。直後の。これはちょっとした助けになるかもしれませんが、質問を言い換えることもできます。 – Alex
名前 "abc"を入力します。例えば、名前[3]に格納されているものは '\ n'になります。現在、バッファには何もないので、whileループは空のバッファからgetchar()を呼び出すため、そこにスタックされています。 –