ソースを書いてみたはいいんですが、、、

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
kiriya

ソースを書いてみたはいいんですが、、、

#1

投稿記事 by kiriya » 12年前

C++初心者です。
最近三平方の定理を習ったので、まずは直角三角形の辺の長さを求められるプログラムを作ってみようとソースを書いてみたんですが
デバッグさえできません、、、書いたソースは↓の通りです。
エラー表示はないんですが、scanfがなんとかかんとか言われます。
自分で見直してみたものの何が間違っているのかさっぱりわかりません。また、デバッグさえできてないのでしっかり計算してくれるのかも不明です。
どこが間違っていて、どうすれば動くのか?また、計算等でおかしい部分もあれば教えていただけると嬉しいです。
なにとぞよろしくお願いしますm(_ _)m

コード:

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

int main(void){
	
	double x; //横の長さ
	double y; //縦の長さ
	double z; //斜めの長さ

	double a; //横の長さを求めるときに使う変数
	double b; 
	double n;
	double m;

	double c; //縦の長さを求めるときに使う変数
	double d;
	double q;
	double w;

	double e; //斜めの長さを求めるときに使う変数
	double f;
	double h;
	double g;


	printf("直角三角形の一辺の長さを計算します。順を追ってわかる辺の長さを入力してください。\n");
	puts("求めたい辺のところは0と入力してください。");
	printf("横の長さ:");       scanf("%f",&x);
	printf("縦の長さ:");     scanf("%f",&y);
	printf("斜めの長さ:");   scanf("%f",&z);

	if(x == 0){
		a = pow(z,2.0);b = pow(y,2.0);  //a=z^2(斜めの二乗)に、b=y^2(縦の二乗)に
        n = a - b;                      //aからbを引きn(横の二乗)を求める
	    m = sqrt(n);                    //nを二乗の形から戻す
		printf("直角三角形の横の辺の長さは%fcmです。\n",m);
	}

	else if(y == 0){
			c = pow(z,2.0);d = pow(x,2.0);  //c=z^2(斜めの二乗)に、d=x^2(横の二乗)に
	        q = c - d ;                      //cからdを引きq(縦の二乗)を求める
	        w = sqrt(q);                    //qを二乗の形から戻す
	        printf("直角三角形の縦の辺の長さは%fcmです。\n",w);
	}
	else if(z == 0){
		e = pow(x,2.0);f = pow(y,2.0);
	    h = e + f;
		g = sqrt(h);
		printf("直角三角形の斜めの辺の長さは%fcmです。\n",g);
	}
	else{
		printf("ごめんなさい、無理ですヽ(・∀・)ノ");
	}
	return 0;
}

kiriya

Re: ソースを書いてみたはいいんですが、、、

#2

投稿記事 by kiriya » 12年前

すみません!!
C++じゃなくてCです!!
使ってる環境がvisual studio2010 C++のやつです

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

Re: ソースを書いてみたはいいんですが、、、

#3

投稿記事 by みけCAT » 12年前

こちらで実行してみました。コンパイルは通りましたが、警告がありました。
http://melpon.org/wandbox/permlink/K0ASnuZV003U5Za0

double型の変数をscanfで読み込む時の入力変換指定子は%fではなく%lfです。
ただし、printfで出力するときは%fで構いません。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

Re: ソースを書いてみたはいいんですが、、、

#4

投稿記事 by みけCAT » 12年前

直接scanfを使わずに、fgetsで1行読み込んでからstrtodでdouble型に変換すると、より安全かもしれません。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

kiriya

Re: ソースを書いてみたはいいんですが、、、

#5

投稿記事 by kiriya » 12年前

返信ありがとうございます!
%lfに直してみましたダメでしたねぇ、、、
次fgetsの方試してみます

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

Re: ソースを書いてみたはいいんですが、、、

#6

投稿記事 by みけCAT » 12年前

strtodよりatofの方が簡単かもしれません。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

kiriya

Re: ソースを書いてみたはいいんですが、、、

#7

投稿記事 by kiriya » 12年前

新しいプロジェクトでデバッグしてみたらできましたw
ですが、一度閉じてからもう一度実行してみると「\Projects\フリープログラム\Debug\フリープログラム.exe を開いて書き込むことができません。」
とのようにでてデバッグできなくなっていました。たぶんさっきもこれでできなかったんだと思うのですが、原因はなんなんでしょうか?
また、プロジェクトの削除もできなくなっています。
対処法もできれば教えて欲しいです。

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

Re: ソースを書いてみたはいいんですが、、、

#8

投稿記事 by みけCAT » 12年前

ウイルス対策ソフトが悪さしていることも考えられますが、大抵は表示されたプログラムが起動しっぱなしであることが原因です。
タスクマネージャで表示されたプログラムを終了してみてください。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

kiriya

Re: ソースを書いてみたはいいんですが、、、

#9

投稿記事 by kiriya » 12年前

みけCATさん本当にありがとうございます!!
タスクから終了させたら正しく動作しました!!w

閉鎖

“C言語何でも質問掲示板” へ戻る