みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

C言語のプログラムについて

三角形を判定するプログラムを作ったのですが直角三角形ができるはずがないのに直角三角形の判定が出てしまいます。簡単なことなのかもしれませんが自分ではわからなくなってしまったのでご指摘してもらいたいです。
#include<stdio.h>

void tri(int x,int y,int z)
{
if((x*x==y*y+z*z)||(y*y==x*x+z*z)||(z*z==x*x+y*y))
{
printf("これは直角三角形です。");
printf("これは三角形です。");
}else if((x+y>=z)||(x+z>=y)||(y+z>=x))
{
printf("これは三角形ではありません。");
}else{
printf("これは三角形です。");
}
}
int main(void)
{
int e1,e2,e3;

printf("3辺を入力してください");
scanf("%f,%f,%f",&e1,&e2,&e3);
tri(e1,e2,e3);

return(0);
}

投稿日時 - 2014-08-06 13:21:31

QNo.8706510

すぐに回答ほしいです

質問者が選んだベストアンサー

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) になり、成立しますね。でもこれは三角形です。

投稿日時 - 2014-08-06 13:45:23

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

Wr5

まぁ、既にツッコミされていますが……。
どういう入力をして、どうなったんでしょうか?

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);
みたいな。

投稿日時 - 2014-08-06 13:50:54

ANo.1

e1,e2,e3はintなのに,どうして
scanf("%f,%f,%f",&e1,&e2,&e3);
こんな読み方をするの?

投稿日時 - 2014-08-06 13:40:00

あなたにオススメの質問