私はこの問題を何時間もグーグルで調べてきましたが、これまでのところ言及されていません。
int getInt()
{
char* rawin = (char*)malloc(100);
printf("How big should the secret code be?\n(Input number of elements):\n");
while(fgets(rawin, 100, stdin) != NULL)
{
if (sscanf(rawin,"%d") == 1)
{
break;
}
printf("Numbers only please.\n");
}
int in = atoi(rawin);
free(rawin);
return in;
}
この関数を 2 回呼び出すと、最初に呼び出した方は正常に動作しますが、2 回目はおかしな動作をします。while ループに入るのではなく、プログラムは fgets を無期限にループするかのように動作します。fgets の 2 回目の呼び出しは完了しないため、何も返されません。デバッグ時、"while(fgets..." の後 (ループの後を含む) のどこかに配置されたブレークポイントには到達しません。標準入力の末尾に "\n"、"\0"、"\n\0" を追加してみました。 「\n」または「\0」ではないすべての文字を読み込んで標準入力を「フラッシュ」しようとしましたが、これも何もしませんでした。
編集:明確にするために、「if」ステートメントの条件はプレースホルダーです。