プログラムが実行できない

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

プログラムが実行できない

#1

投稿記事 by nobita » 15年前

二次方程式を解くプログラムを作ったのですが、ビルドしてデバッグした直後に

○○○(実行ファイル名)の 0x54d2f508 (msvcr100d.dll) でハンドルされていない例外が発生しました: 0xC0000005: 場所 0x00000000 に書き込み中にアクセス違反が発生しました。

と表示され、プログラムがそれ以上動かなくなります。

ソースコード:
#include<stdio.h>
#include<math.h>

double SolveEquation1(double n1, double n2, double n3);
double SolveEquation2(double n1, double n2, double n3);
double SolveEquation3(double n1, double n2, double n3);

double a=0, b=0, c=0;

void main()
{
printf("This program solves quadratic equation.\n");
printf("\nax^2+by+c=0\n");
printf("\nType in a:");
scanf("%lf" , a);
printf("\nType in b:");
scanf("%lf" , b);
printf("\nType in c:");
scanf("%lf" , c);

double disc = 0;
disc = b*b - 4*a*c;

if(0 > disc)
{
printf("\n\nNo real number solution\n");
}

if(disc = 0)
{
printf("\n\nThe answer is %lf.\n" , SolveEquation1(a,b,c));
}

if(a = 0)
{
printf("\n\na cannot be 0.\n");
}

if(0 < disc)
{
printf("\n\nThe answer is %lf and %lf.\n" , SolveEquation2(a,b,c) , SolveEquation3(a,b,c));
}

}

double SolveEquation1(double n1, double n2, double n3)
{
double m = 0, n = 0;
double s = 0;
m = 2*a;
n = -b;

s = n / m;

return s;
}

double SolveEquation2(double n1, double n2, double n3)
{
double m = 0, n = 0, o = 0;
double s = 0;
m = 2*a;
n = -b;
o = sqrt(b*b-4*a*c);

s = (n+o)/m;

return s;
}

double SolveEquation3(double n1, double n2, double n3)
{
double m = 0, n = 0, o = 0;
double s = 0;
m = 2*a;
n = -b;
o = sqrt(b*b-4*a*c);

s = (n-o)/m;

return s;
}

コンパイラ:Microsoft Visual C++ 2010 Express Edition
OS:Windows Vista Business (英語版)

今までに無いようなエラーなので、解決方法が全く分かりません。
よろしくお願い致します。

たかぎ

Re:プログラムが実行できない

#2

投稿記事 by たかぎ » 15年前

> scanf("%lf" , a);

↑とか

> scanf("%lf" , b);

↑とか

> scanf("%lf" , c);


↑とかが怪しい

シエル

Re:プログラムが実行できない

#3

投稿記事 by シエル » 15年前

scanfにはアドレスを渡しましょう

ぜらーちん

Re:プログラムが実行できない

#4

投稿記事 by ぜらーちん » 15年前

× void main(){ }
○ int main(){省略 return(0);}

プログラム的には間違ってないけど、c的にはこっちのほうが良い感じ

【アドバイス】
>>たかぎさんが言うとおり、scanf三つとも怪しい
よく見てみると気づくと思う

後、scanfを使う時には
char buf[xxx];

scanf(中身);
gets(buf); //改行ポイ捨て

ってやった方がいいと思う

nobita

Re:プログラムが実行できない

#5

投稿記事 by nobita » 15年前

解決しました!
ありがとうございました。

白い時空

Re:プログラムが実行できない

#6

投稿記事 by 白い時空 » 15年前

他にもありますね。

>if(disc = 0)
>if(a = 0)
よくあるミスですが比較は==です。これだとdisc,aに0が代入されます。


あと、SolveEquation関数がおかしいです。
関数の引数n1,n2,n3を使わず、a,b,cをグローバル変数にして解いています。
SolveEquation関数ではa,b,cではなく、n1,n2,n3を使ってください。
正しい答えは返ってくると思いますが、修正してください。
画像

閉鎖

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