角錐の底面積と高さを整数値で入力し,その体積を小数点第1位まで表示する
角錐の体積は以下の式で求める
角錐の体積 = 底面積 * 高さ / 3
処理
底面積と高さを入力
底面積と高さがどちらも0より大きい値ならば
角錐の体積を求めて、表示する
どちらかが0以下ならば
"入力された値が正しくありません" のメッセージを出力する
底面積と高さはint型とする
体積はdouble型とする
イメージ
底面積 5 高さ 2 の時、体積は 3.3 と表示される
という問題で僕は以下の様に作りました。#include <stdio.h>
void main(void)
{
int teimennseki takasa;
double taiseki
printf("角錐の底面積を入力して下さい(整数値):");
scanf("%d",&teimennseki);
printf("高さを入力して下さい(整数値):");
scanf("%d",&takasa);
if (teimennseki <= 0 ){
printf("入力された値が正しくありません");
}
else if (takasa <= 0 ){
printf("入力された値が正しくありません");
}
else{
taiseki = teimennseki * takasa / 3.0
printf("底面積 %d 高さ %d の時、体積は %.1f\n",teimennseki,takasa,taiseki);
}
return 0;
}
すると、エラー7(記憶領域制御ブロックが壊れていました。) がでます。これはどういうエラーで、原因はどこでしょうか?
No.6ベストアンサー
- 回答日時:
> エラー7(記憶領域制御ブロックが壊れていました。
) がでます他の方が指摘された細かいこと以外に、コンパイラによって問題が出そうなところ
がひとつあります。
> void main(void)
省略
> return 0;
> }
規格云々の話もありますが、少なくとも、戻り値を void で宣言した関数で、
return 0; と値を返してはいけませんね。
本来なら、コンパイルエラーにして欲しいところですが、これを通してしまう
コンパイラーなのでしょう。
で、戻り値用の領域を用意してないのに、戻り値を入れたことが「記憶領域制御
ブロックを壊す」ことにつながったのでしょう。
No.5
- 回答日時:
プログラムの記述については皆さんの回答されている通り。
エラーについても正確なところはわかりませんが
> 記憶領域制御ブロックが壊れていました。
という表現から受ける印象は、「OSが壊れているんじゃないの?」
というところですね。
No.4
- 回答日時:
何のエラーかは分かりませんが、、
どのような環境(OSやコンパイラ)でどの時点でのエラーなのか(コンパイル、実行時)ぐらいは示された方が良いと思います。
taiseki = teimennseki * takasa / 3.0
の行に ; が抜けているのは関係ないですよね?^^;
後、本題とはそれますが、
if (teimennseki <= 0 ){
printf("入力された値が正しくありません");
return 1;
}
else if (takasa <= 0 ){
printf("入力された値が正しくありません");
return 1;
}
taiseki = teimennseki * takasa / 3.0
printf("底面積 %d 高さ %d の時、体積は %.1f\n",teimennseki,takasa,taiseki);
と言うようなコードの方が読みやすくなるかと^^;
好みの問題かも知れませんが、、
No.3
- 回答日時:
このソースは、コピペされたものでしょうか?
もし、そうなら、下の2行のセミコロン;が抜けています。
double taiseki
taiseki = teimennseki * takasa / 3.0
プログラムは正しく作動すると思いますよ!
OS、コンパイラーなども補足されますと
後の方の回答がやり易いのではないでしょうか?
No.2
- 回答日時:
>double taiseki
>taiseki = teimennseki * takasa / 3.0
こちらもそれぞれ、
double taiseki;
taiseki = teimennseki * takasa / 3.0;
ですね。(ただのセミコロン付け忘れ)
それから
>return 0;
とするのであればint main(void)であるべきです。
これって元のソースのコピーじゃありませんね?
写し間違いが多い気がしますので…。(^_^;
No.1
- 回答日時:
>int teimennseki takasa;
これは正しくは
int teimennseki,takasa;
ですよね。
元のソースはこうなっているのかな?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
正負を反転させて出力するプロ...
-
Eclipseコンソール表示を、リセ...
-
C++ scanfで止まらない
-
Linuxで入力待ちなしkeyread関...
-
WindowsでEOF
-
C言語のプログラム作成の課題...
-
プログラミング初心者です。 Py...
-
java初心者です。入力されたの...
-
VisualStudio2019のコードアナ...
-
コマンドプロンプトからのEOFの...
-
C言語・YesNo入力のループで解...
-
Linuxプログラミングで、キーボ...
-
コマンドラインから引数を渡し...
-
入力候補を表示させるには・・・?
-
至急教えてください。プログラ...
-
scanfについて
-
ヒントをください!
-
scanf関数について
-
小数か整数かを判定する方法
-
C言語の勉強しています。すみま...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
正負を反転させて出力するプロ...
-
プログラミング初心者です。 Py...
-
数字以外が入力されたらエラー...
-
Eclipseコンソール表示を、リセ...
-
Excel VBAで、Application.Inpu...
-
*をユーザーが入力した数字の数...
-
java初心者です。入力されたの...
-
Linuxで入力待ちなしkeyread関...
-
batプログラム上で文字列を入力...
-
WindowsでEOF
-
Userformの入力順序をタブオー...
-
コマンドプロンプトからのEOFの...
-
EDITコントロールで入力できる...
-
VisualStudio2019のコードアナ...
-
電卓の小数点
-
Eclipseでコマンドラインを入力...
-
小数か整数かを判定する方法
-
cout関数を使っているのですが...
-
UWSCで変数をキー入力
-
ワードで文字を入力する時の変...
おすすめ情報