入力したものが数字であることを確認したいときに、この問題に遭遇しました。数値の入力に成功すると、scanf
関数は 1 を返します。だからここに私が書いたものがあります:
int argu;
while(scanf("%d",&argu)!=1){
printf("Please input a number!\n");
}
しかし、そのようなものを入力するabcd
と、ループが永遠に続き、プロンプトが表示されなくなります。
オンラインで調べたところ、キャッシュと関係があることがわかりましたscanf
。新しいデータを取得できるように、キャッシュをクリーンアップする必要があります。それでやってみfflush
ましたがダメでした。
それから私はこれを見ました:
int argu,j;
while(scanf("%d",&argu)!=1){
printf("Please input a number!\n");
while((j=getchar())!='\n' && j != '\n');
}
次に、「abcd」などを入力すると、うまく機能し、入力を求められました。しかし、「12ab」などを入力すると、再び機能しなくなりました。
入力が実際に数字であることを確認し、scanf("%d", &argu)
そうでない場合は別の入力を求める方法はありますか?
編集:
答えを見て、 を使用して問題を解決しましたwhile(*eptr != '\n')
。
fgets
この関数は実際には '\n' を配列に読み込み、読み込まないことに注意してくださいgets
。ので注意してください。