電子書籍の厳選無料作品が豊富!

三角形を判定するプログラムを作ったのですが直角三角形ができるはずがないのに直角三角形の判定が出てしまいます。簡単なことなのかもしれませんが自分ではわからなくなってしまったのでご指摘してもらいたいです。
#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);
}

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

まぁ、既にツッコミされていますが……。


どういう入力をして、どうなったんでしょうか?

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

e1,e2,e3はintなのに,どうして


scanf("%f,%f,%f",&e1,&e2,&e3);
こんな読み方をするの?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!