2016-11-18 11 views
0

2次方程式の根を見つけるためにこのコードを書いています。走査部分の前にスペースを入れないとうまくいきません。 (例えば、入力Iでは、書き込み:a=1,b=2, c=1)。その場合、変数を削除するだけです。 (私が与えた例では、cは入力から削除され、そのように私が受け取る答えは-1の代わりに0、-2です)。スペースを他の場所に置くとコードが動作します(a =1,b= 2,c=1)。Cスペース内のscanf

この問題を解決するにはどうすればよいですか?

int main() 
{ 
    double root1 = 0, root2 = 0; 
    double a = 0., b = 0., c = 0.; 
    printf("Enter a polynomial:\n"); 
    scanf("a=%lf,b=%lf,c=%lf", &a, &b, &c); 

    { 
     if (a == 0) 
     { 
      return 0; 
     } 
     if ((b * b - 4 * a * c) == 0) 
     { 
      root1 = -b/2 * a; 
      printf("root is %f", root1); 
     } 
     else if ((b * b - 4 * a * c) < 0) 
     { 
      printf("There are no roots"); 
     } 
     else { 
      root1 = (-b + sqrt(b * b - 4 * a * c))/2* a; 
      root2 = (-b - sqrt(b * b - 4 * a * c))/2* a; 
      printf("Roots are %f,%f", root1, root2); 
     } 
    } 
    return 0; 
} 
+0

を先頭にスペースがあなたのフォーマット文字列の一部ではないので、その後 –

+0

を入力してください。 –

+0

これらの愚かなコンマと厳しい入力仕様は忘れて、入力しないでください。 'printf("多項式a b cを入力する:\ n "); scanf( "%lf%lf%lf"、&a、&b、&c); 'を入力し、' 1 2 1'を入力するか 'newline 'で区切ってください) –

答えて

0

この問題を解決する方法はありません。これは実際には関数scanf()の問題です。自体。代わりに、あなたはfgets()を使うことができます。代わりに。

double a=0.0,b=0.0,c=0.0; 
printf("Enter a polynomial:\n"); 
scanf(" %lf, %lf, %lf",&a,&b,&c); 
+1

そうではありません(つまり、この問題を解決する方法があります)。問題は 'scanf()'が悪用されていることにあります。 –

2

使用インクルードが予期しない場所でのスペースを可能なフォーマットで

double a=0.,b=0.,c=0.; 
printf("Enter a polynomial:\n"); 
scanf("a=%lf,b=%lf,c=%lf",&a,&b,&c); 

を交換してみてください。そして、結果をチェックしてください。

//   v v v v v v v v 
if (scanf(" a =%lf , b =%lf , c =%lf", &a, &b, &c) == 3) Oh_Happy_day(); 

スペースは、その指定子がホワイトスペースをリードしてスキャンするようではない"%lf"が必要です。いくつかはまだ良いラインを読んで、それを解析するfgets()を使用するように

//    x   x   x Optional 
if (scanf(" a = %lf , b = %lf , c = %lf", &a, &b, &c) == 3) Oh_Happy_day(); 

明示的になりたいです。

0

スペースがでないため、scanfで使用した書式設定文字列の一部ではありません。です。

あなたは、フォーマット文字列の先頭にスペースを追加する必要がありますちょうど入力1,2,1

scanf(" a=%lf, b=%lf, c=%lf", &a, &b, &c); 
+0

フォーマット文字列は今の方が良いですが、 'a = 1.23'から入力を拒否します。おそらくそれが必要なのかもしれませんが、 ""%lf、b =%lf、c =%lf ""はもっと柔軟になります。 '%lf'の前の空白は柔軟性を維持するためには必要ありませんが、フォーマットをより対称にしています。 'scanf()'の結果もテストして、3つの値が正常に変換されたことを確認する必要があります。もちろん、 'a = 1.23、b = 2.34、c = 3.45 'という表記法は、特にb = 2.34、c = 3.45、a = 1.23と入力する柔軟性がないため、不快です余分なタイピングを正当化するだろう)。 –

関連する問題