質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

3回答

2703閲覧

if文を使った面積算出プログラミング

Sade_ni

総合スコア7

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2020/05/25 00:08

#include<stdio.h>
#include<math.h>
int main(void){

int n; printf("面積を計算します。\n 1.円\n 2.正方形\n 3.三角形\n 何番の図形にしますか?\n"); scanf("%d",&n); if(n == 1) { double a; float S; const double PI=3.141592653589793; printf("半径aを入力してください\n"); scanf("%lf",&a); S=a*a*PI; printf("面積は%fです",S); } else if(n == 2) { double a; float S; printf("正方形の一辺aを入力してください\n"); scanf("%lf",&a); S=a*a; printf("面積は%fです",S); } else if(n == 3) { double a; float S; printf("正三角形の一辺aを入力してください\n"); scanf("%lf",&a); S=sqrt(3)/4*a*a; printf("面積は%fです",S); } else { printf("入力が不適切でした\n"); } return 0;

}
面積が0になってしまいます。解決方法を教えてください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

AMK

2020/05/25 00:19

ソースコードは下記の方法で入力しましょう https://teratail.com/help/question-tips#questionTips3-5-1 Cあまり詳しくないけど・・・ C#の知識で行くと、変数宣言がおかしくない? 同じ変数宣言を何度もしている・・・ 全部面積がゼロになるのか?1つだけなのか?を明確にしてください。
Sade_ni

2020/05/25 00:38

ソースコード入力方法教えていただきありがとうございます。全部面積が0になります。
elsewhere

2020/05/25 01:04

コードをコピペして実行したところ、一応、私の環境では0にはならずに正しい計算結果を出しています。 windows10 (1903 osビルド18362.36) gcc 6.3.0 コマンドプロンプトからexeファイルを実行しました。
guest

回答3

0

とりあえず、プリント文を使って入力された変数の値を表示してみましょう
1つ1つ変数の内容が合っているのか?確認してみてください。

投稿2020/05/25 00:45

AMK

総合スコア765

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

C

1double a; 2float S;

3つある分岐全てにおいて、ここが3回登場しているのが原因ではないでしょうか?
環境が分からないので、コンパイラにもよりますが、このままでは多重定義と判断され実行出来ないケースがあります。

C

1printf("面積は%fです",S);

それともう一つ、%fではなく**%lf**のような気がします。

投稿2020/05/25 00:42

stdio

総合スコア3307

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

LouiS0616

2020/05/25 00:44

1. スコープが違うように見えます。 2. doubleの出力指定子は%fで合っています。%lfにするのは入力を受け取る場合です。
SHOMI

2020/05/25 01:14 編集

>3つある分岐全てにおいて、ここが3回登場しているのが原因ではないでしょうか? K&Rより前の大昔のコンパイラならコンパイルエラーになりますが、前の質問でgccと書いているのでブロック先頭で宣言できるため関係ないですね。 >%fではなく%lfのような気がします floatもdoubleも"%f"であっています。scanfのdoubleに対しての書式と混同しprintfにも"%lf"と書く人が多かったためC99で追加で"%lf"が許容されました。
SHOMI

2020/05/25 00:57

すみませんリロードせずに書いて指摘がかぶってしまいました
stdio

2020/05/25 01:00 編集

1は単に同じ変数が関数内にいる事が、なんとなく気になるだけですね。 2は前行の時点で、doubleからfloatに無理に変換しているように見えました。VSの場合警告が発生するので変数Sをdoubleに変更して下さい。別に動作に問題ないと切り捨てるなら、構いませんが...
Zuishin

2020/05/25 04:22 編集

それは %lf とは無関係ですね。S は float なので double の値を明示的なキャスト無しに代入していることへの警告です。double の書式指定子が仮に %lf でなければならなかったとしても表示しようとしているのは float なので的外れです。実際には %f で問題ないので、二重に間違っています。
episteme

2020/05/26 13:59

> 1は単に同じ変数が関数内にいる事が、なんとなく気になるだけですね。 ならば 「3つある分岐全てにおいて、ここが3回登場しているのが原因ではないでしょうか?」 って回答は誤りやね。
guest

0

ベストアンサー

面積が0になってしまいます。

ちゃんと動いてるような気がします。

投稿2020/05/25 00:14

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Sade_ni

2020/05/25 00:39

1辺の入力まではできるのですが面積が全部0になります。
Sade_ni

2020/05/25 01:02

できていました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問