- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C言語のプログラムについて)
C言語のプログラムについて
このQ&Aのポイント
- C言語のプログラムについて三角形を判定するプログラムを作ったが、直角三角形の判定が出る問題がある。
- 直角三角形の判定が出る理由を知りたい。
- 三角形の判定ロジックを修正する方法を教えてほしい。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
scanf("%f,%f,%f",&e1,&e2,&e3); ではなく、 scanf("%d,%d,%d",&e1,&e2,&e3); です。 if((x+y>=z)||(x+z>=y)||(y+z>=x)) この判定は間違っています。 x=10,y=10,z=10 で考えてみましょう。 (x+y>=z) は(20>=10) になり、成立しますね。でもこれは三角形です。
その他の回答 (2)
- Wr5
- ベストアンサー率53% (2173/4061)
回答No.3
まぁ、既にツッコミされていますが……。 どういう入力をして、どうなったんでしょうか? int型とfloat型では格納されるビットパターンが異なるんじゃないですかねぇ…。 # int型の領域にfloat型として書き込もうとするので…バッファオーバーランしているんじゃないですかね…。 # e1かe3の前後どっちか破壊しているかと思われます。 >scanf("%f,%f,%f",&e1,&e2,&e3); >tri(e1,e2,e3); tri()呼び出しの前にそれぞれの変数の内容を表示して、入力した値と合っているか確認してみてはどうでしょう。 scanf("%f,%f,%f",&e1,&e2,&e3); printf("e1=%d,e2=%d,e3=%d\n", e1, e2, e3); tri(e1,e2,e3); みたいな。
- f272
- ベストアンサー率46% (8467/18126)
回答No.1
e1,e2,e3はintなのに,どうして scanf("%f,%f,%f",&e1,&e2,&e3); こんな読み方をするの?