OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

プログラムがエラーになってしまいます

  • すぐに回答を!
  • 質問No.149870
  • 閲覧数759
  • ありがとう数0
  • 気になる数0
  • 回答数6
  • コメント数0

お礼率 6% (4/58)

角錐の底面積と高さを整数値で入力し,その体積を小数点第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(記憶領域制御ブロックが壊れていました。) がでます。これはどういうエラーで、原因はどこでしょうか?
通報する
  • 回答数6
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.6
レベル14

ベストアンサー率 50% (1122/2211)

> エラー7(記憶領域制御ブロックが壊れていました。) がでます

他の方が指摘された細かいこと以外に、コンパイラによって問題が出そうなところ
がひとつあります。

> void main(void)
省略
> return 0;
> }

規格云々の話もありますが、少なくとも、戻り値を void で宣言した関数で、
return 0; と値を返してはいけませんね。

本来なら、コンパイルエラーにして欲しいところですが、これを通してしまう
コンパイラーなのでしょう。

で、戻り値用の領域を用意してないのに、戻り値を入れたことが「記憶領域制御
ブロックを壊す」ことにつながったのでしょう。
-PR-
-PR-

その他の回答 (全5件)

  • 回答No.1
レベル13

ベストアンサー率 37% (419/1115)

>int teimennseki takasa; これは正しくは int teimennseki,takasa; ですよね。 元のソースはこうなっているのかな?
>int teimennseki takasa;

これは正しくは

int teimennseki,takasa;

ですよね。
元のソースはこうなっているのかな?


  • 回答No.2
レベル13

ベストアンサー率 37% (419/1115)

>double taiseki >taiseki = teimennseki * takasa / 3.0 こちらもそれぞれ、 double taiseki; taiseki = teimennseki * takasa / 3.0; ですね。(ただのセミコロン付け忘れ) それから >return 0; とするのであればint main(void)であるべ ...続きを読む
>double taiseki

>taiseki = teimennseki * takasa / 3.0

こちらもそれぞれ、

double taiseki;

taiseki = teimennseki * takasa / 3.0;

ですね。(ただのセミコロン付け忘れ)

それから

>return 0;

とするのであればint main(void)であるべきです。

これって元のソースのコピーじゃありませんね?
写し間違いが多い気がしますので…。(^_^;
  • 回答No.3
レベル11

ベストアンサー率 33% (131/392)

このソースは、コピペされたものでしょうか? もし、そうなら、下の2行のセミコロン;が抜けています。 double taiseki taiseki = teimennseki * takasa / 3.0 プログラムは正しく作動すると思いますよ! OS、コンパイラーなども補足されますと 後の方の回答がやり易いのではないでしょうか?
このソースは、コピペされたものでしょうか?
もし、そうなら、下の2行のセミコロン;が抜けています。

double taiseki
taiseki = teimennseki * takasa / 3.0

プログラムは正しく作動すると思いますよ!
OS、コンパイラーなども補足されますと
後の方の回答がやり易いのではないでしょうか?
  • 回答No.4
レベル9

ベストアンサー率 33% (33/98)

何のエラーかは分かりませんが、、 どのような環境(OSやコンパイラ)でどの時点でのエラーなのか(コンパイル、実行時)ぐらいは示された方が良いと思います。 taiseki = teimennseki * takasa / 3.0 の行に ; が抜けているのは関係ないですよね?^^; 後、本題とはそれますが、 if (teimennseki <= 0 ){ printf(" ...続きを読む
何のエラーかは分かりませんが、、
どのような環境(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.5
レベル13

ベストアンサー率 24% (357/1463)

プログラムの記述については皆さんの回答されている通り。 エラーについても正確なところはわかりませんが > 記憶領域制御ブロックが壊れていました。 という表現から受ける印象は、「OSが壊れているんじゃないの?」 というところですね。
プログラムの記述については皆さんの回答されている通り。
エラーについても正確なところはわかりませんが
> 記憶領域制御ブロックが壊れていました。
という表現から受ける印象は、「OSが壊れているんじゃないの?」
というところですね。
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ