0

学校では、ブリッジ抵抗を持つブリッジ回路の電圧と電流を計算するプログラムを書きました。

私の問題は、ユーザーがすべての抵抗を CSV (R1、R2、R3...) として入力することです。ユーザー入力を検証して、浮動小数点数または整数のみが入力されているかどうかを確認したいと考えています。

入力が有効でない場合にユーザーに値の再入力を強制するために、検証用にこの do-while ループを作成しました。

int check = 1;
do{
  if(check == 0){                                                           
    check = 1;
    puts("Re-Enter as the following: R1, R2, R3, R4, Rab");
  }//endif
  check = scanf("%f, %f, %f, %f, %f", &fR1, &fR2, &fR3, &fR4, &fRab);           
  fflush(stdin);
}while(check == 0);
check = 1;

編集

このコードは、ユーザーが文字または間違った数の引数を入力した場合 (例: 12、12、[ENTER])、単に「エラー」を「スロー」します。ユーザー入力を検証する最良の方法は何ですか?

4

1 に答える 1

0

安全な入力を取得する最善の方法は、fgets入力全体を文字列として使用して読み取ることです。次に、文字列が正常であることを確認し、その後、個々の数値を解析できます (たとえば、 を使用sscanf)。

fflush(stdin);は未定義の動作であり、関数は出力ストリームに対してのみ明確に定義されています。したがって、この行により、プログラムがクラッシュしたり、燃えたり、期待どおりに動作するように見えたりします。getchar()代わりに、次を使用して標準入力から改行文字をフラッシュします

于 2013-11-01T16:24:08.897 に答える