別の問題は、あなたが読んでいることscanf("%f", &input);
だけです。ユーザーが「pi」のように C の浮動小数点数として解釈できないものを入力すると、scanf()
呼び出しは に何も割り当てずinput
、そこから先に進みません。これは、「pi」を読み続けようとして失敗することを意味します。
while(!feof(stdin))
他の投稿者が正しく推奨している変更を考えると、 「pi」と入力すると、以前の値を出力input
してプロンプトを出力する無限ループが発生しますが、プログラムは新しい入力を処理しません。
scanf()
作成した入力変数への割り当ての数を返します。割り当てが行われなかった場合、それは浮動小数点数が見つからなかったことを意味し、 のようなものでさらに入力を読み取る必要がありますchar string[100];scanf("%99s", string);
。これにより、入力ストリームから次の文字列が削除されます (とにかく最大 99 文字 - 余分char
は文字列の null ターミネータ用です)。
ご存知のように、これは私が を嫌うすべての理由と、代わりscanf()
に を使用fgets()
して を使用して解析する理由を思い出させてくれsscanf()
ます。