2016-10-22 3 views
0

これは私の最初の試みですが、動作しませんでした。1行にスペースで区切られた2つの浮動小数点のエラーハンドル

それは私が意図的に間違った入力値を入力する場合は例えばループをinfに行く:

float a,b ; 
while (1){ 
    if(scanf("%f %f",&a,&b) == 2) { 
     break; 
    } 
    printf("Error, try again:"); 
} 
+1

'scanf()'などは行を気にしないので、行を気にすると間違った機能を使います。入力を行読み関数(['fgets()'](http://pubs.opengroup.org/onlinepubs/9699919799/functions/fgets.html)または['getline()'](http: /pubs.opengroup.org/onlinepubs/9699919799/functions/getline.html))、 'sscanf()'でその行を解析します。改行は気にしませんが、1行だけで遊ぶことができます。さらに、最初の解析が失敗した場合は、行を再解析することができます。デバッギングを容易にすることができるエラーメッセージの完全な行を報告することもできます。 –

答えて

3

afdasこの種の問題を回避する最善の方法は、一度に行全体を読み取るためにfgets()を使用することですasdas dfsad sscanf()(または、場合によってはstrtod())を使用して解析します。これはあなたが現在持っている特定の問題を避けるだけでなく、入力フォーマットが期待通りでないときに他のクラスの問題を避けるでしょう。

関連する問題