アプリ版:「スタンプのみでお礼する」機能のリリースについて

先日のプログラムを作り直しました。アドバイスのおかげでエラーは減りましたが、まだ完ぺきではないようです。恐らく、elseのところがいけないと思うのですが、どうしたらいいか分かりません。
ご指摘お願いします。

#include <stdio.h>
#include <math.h>
void main(void)
{
double x ,y ,z ,error ,menseki ;
double ans;
printf("x ?"); scanf("%lf", &x);

printf("y ?"); scanf("%lf", &y);

printf("z ?"); scanf("%lf", &z);


if(x<y+z || y<x+z || z<x+y)
{
ans=(x+y+z)/2;
menseki=sqrt(ans*(ans-x)*(ans-y)*(ans-z));
}


if(x==y && y==z && z==x)
{
printf("正三角形です");
printf("面積は%lfです" , menseki);
}


else if(x==y || y==z || z==x)
{
printf("二等辺三角形です");
printf("面積は%lfです" , menseki);
}


else
{
printf("三角形です");
printf("面積は%lfです" , menseki);
}


else
{
printf("error");
}
}

A 回答 (4件)

エラーの場合を先に書くのが、私の好みです。


押しつけるつもりは全くありません。
あくまで参考です。

#include <stdio.h>
#include <math.h>

int main(void)
{
double x, y, z, s;

printf("x ? "), scanf("%lf", &x);
printf("y ? "), scanf("%lf", &y);
printf("z ? "), scanf("%lf", &z);

if (x <= 0 || y <= 0 || z <= 0 || x + y <= z || y + z <= x || z + x <= y) {
printf("三角形にならない\n");
}
else {
if (x == y && y == z) {
printf("正三角形\n");
}
else if (x == y || y == z || z == x) {
printf("二等辺三角形\n");
}
else {
printf("その他の三角形\n");
}
s = (x + y + z) / 2;
printf("面積は%f\n", sqrt(s * (s - x) * (s - y) * (s - z)));
}
return 0;
}
    • good
    • 0

少々ネストしますが、こんな感じかと



if (二辺の計が一辺より長い) {
 if (三辺が等しい) {
  正三角形と表示
 } else if(二辺が等しい) {
  二等辺三角形と表示
 } else {
  三角形と表示
 }
 面積計算
 面積を表示
} else {
 エラー表示
}

あと正三角形の判断ですが、(x==y && y==z) で必要十分です。
    • good
    • 0

最後の else はコンパイルエラーになるでしょうね。



この else って最初の if の else 部分だと思いますので、
そのようにかかないと駄目でしょう。

私なら

if(x<y+z || y<x+z || z<x+y)
{
ans=(x+y+z)/2;
menseki=sqrt(ans*(ans-x)*(ans-y)*(ans-z));
} else {
printf("三角形になってません!\n");
return 1;
}

とかにしてしまいます。
    • good
    • 0

コンパイルすら通らないと思うんだけど。


if~elseのペアを再確認しる。
    • good
    • 0

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