私は、ループサイクルごとに1つずつ、標準入力から数値を読み取る小さなCプログラムを持っています。ユーザーが何らかの NaN を入力すると、エラーがコンソールに出力され、入力プロンプトが再び返されます。「0」が入力されると、ループが終了し、指定された正/負の値の数がコンソールに出力されます。プログラムは次のとおりです。
#include <stdio.h>
int main()
{
int number, p = 0, n = 0;
while (1) {
printf("-> ");
if (scanf("%d", &number) == 0) {
printf("Err...\n");
continue;
}
if (number > 0) p++;
else if (number < 0) n++;
else break; /* 0 given */
}
printf("Read %d positive and %d negative numbers\n", p, n);
return 0;
}
私の問題は、非数値(「a」など)を入力すると、「-> Err ...」という無限ループが何度も発生することです。これは scanf() の問題だと思います。この関数をより安全なものに置き換えることができることはわかっていますが、この例は初心者向けで、printf/scanf、if-else、およびループについて知っているだけです。
質問への回答は、Cで他のすべてのループをscanf()
スキップし、他while
の質問をざっと読んだことがありますが、この特定の問題に実際に回答するものはありません。