ページ 11

ローカル変数の初期化について

Posted: 2009年3月05日(木) 00:46
by せっちゃん
こんばんわ
C言語初心者です。
初歩的な質問で申し訳ないですが、どうしても解決できなくて質問させていただきます。

私は学生のためのCという本を使ってC言語の勉強をしているのですが、
この本の通りにプログラムを書いたのに、エラーが出ます。

コンパイルはMicrosoft Visual C++ 2008 Express Editionを使っています。


#include <stdio.h>

main()
{
float x, y, z;

printf("z=x*(x+y)/{y*(x-y)}計算します。\n");
printf("xとyを入力してください。----->");
scanf("%f %f, &x, &y");
z =x*(x+y)/(y*(x-y));
printf("z=%7.3f\n", z);
return(0);

}
エラーは
warning C4700: 初期化されていないローカル変数 'x' が使用されます
warbubg C4700: 初期化されていないローカル変数 'y' が使用されます
とでています。
どこがおかしいのでしょうか・・?

Re:ローカル変数の初期化について

Posted: 2009年3月05日(木) 00:56
by Dixq (管理人)
ダブルコーテーションの位置がおかしいです。
誤:scanf("%f %f, &x, &y"); 
正:scanf("%f %f", &x, &y);
後、ゼロ割対策がされていないので、
「1 1」や「0 0」と入力するとバグるのでは無いかと思います。

Re:ローカル変数の初期化について

Posted: 2009年3月05日(木) 01:07
by せっちゃん
お早い解答ありがとうございます。
見落としてましたorz
こんな初歩的なミスを指摘してくれてありがとうございました!

Re:ローカル変数の初期化について

Posted: 2009年3月05日(木) 08:56
by たいちう
> エラーは
> warning C4700: 初期化されていないローカル変数 'x' が使用されます
> warbubg C4700: 初期化されていないローカル変数 'y' が使用されます
> とでています。

エラーではなくて警告です。
エラーの場合は、こんなもんコンパイルできるか~、という感じですが、
警告の場合は、コンパイルできることはできるけど、少し怪しくね?という感じです。

scanfが間違っていたので、その次の行の計算をしようとするときに、
xとyは初期化も代入もされていない、ごみデータのままです。
ホントにこんなデータで計算しちゃっていいの?という警告ですね。

コンパイラの声に耳を傾けましょう。