ページ 11

エラーの原因がわかりません

Posted: 2010年7月05日(月) 22:00
by narica
今、私は選択した数字によって展開が分岐する簡単なアドベンチャーを作っているのですが、下記のプログラムでコンパイルすると Run-Time Check Failure #3 - The variable 'a' is being used without being initialized. というエラーが出てしまいます。


#include "stdafx.h"
#include "stdlib.h"

int sentakua(int);

int _tmain(int argc, _TCHAR* argv[/url])
{
   int a;
   sentakua(a);
   system("pause");
   return 0;
}

int sentakua(int a){

printf("\"敵\"が現れた!\n"
"-------------------------------------------------\n"
"どうしますか?\n"
"(1:攻撃する,2:様子を伺う,3:逃げる)---");
scanf("%d", &a);

switch(a){
   case 1:
printf("-------------------------------------------------\n"
   "攻撃が当たった!\n"
   "\"敵\"に 55 のダメージを与えた!\n");
   break;

   case 2:
printf("-------------------------------------------------\n"
   "\"敵\"もこちらの様子を伺っているようだ。\n");
   break;

   case 3:
printf("-------------------------------------------------\n"
   "しかし、\"敵\"に回り込まれてしまった!\n");
   break;

   default:
printf("-------------------------------------------------\n"
   "間違った選択をする事は\"死\"を意味します。\n");

return 0;

}

return 0;
}


なぜこのエラーが出てしまうのか教えて頂けると助かります。
まだ、C言語を始めて日が経たないのでお手柔らかにお願いします。

--------------------------------------------------------------------------------------------------
開発環境
OS:Windows XP Home Edition Service Pack 3
開発環境:Visual C++ 2010 Express 画像

Re:エラーの原因がわかりません

Posted: 2010年7月05日(月) 22:07
by パコネコ
/*
#include "stdafx.h"
#include "stdlib.h"

int sentakua(int a);
*/
int aではなくintだけだったと思ったのですが…違ったらすいません

Re:エラーの原因がわかりません

Posted: 2010年7月05日(月) 22:10
by シエル
The variable 'a' is being used without being initialized
↑これを見るとaの変数が関係していることが分かります。

で、こいつを翻訳にかけると、

「初期化されずに、可変'a'は使用されています。」

と出ました。

まさに、そのとおりでaが初期化されない状態でsentakua関数に渡されてしまっているから、
このエラーが出ております。

Re:エラーの原因がわかりません

Posted: 2010年7月05日(月) 22:32
by narica
パコネコさん:直しておきました。
         ご指摘、ありがとうございました!

シエルさん:返答ありがとうございます。
        差し支えなければ初期化のやり方を教えて頂けると助かります。 画像

Re:エラーの原因がわかりません

Posted: 2010年7月05日(月) 22:34
by シエル
a=0;です。

Re:エラーの原因がわかりません

Posted: 2010年7月05日(月) 22:38
by narica
シエルさん:ありがとうございます!
エラーも出ずにコンパイルできました! 画像

Re:エラーの原因がわかりません

Posted: 2010年7月05日(月) 22:40
by box
> エラーも出ずにコンパイルできました!

そもそも、_tmainからsentakuaにaを渡す必要があったのでしょうか。
提示されたコードを見る限り、必要性は全くないと思います。 画像

Re:エラーの原因がわかりません

Posted: 2010年7月05日(月) 22:43
by シエル
私も意味がないと思ってましたが、
まだポインタなどがあまり理解されてないと思ってあえて突っ込みませんでした。すみません。

Re:エラーの原因がわかりません

Posted: 2010年7月05日(月) 22:46
by box
> パコネコさん:直しておきました。
>          ご指摘、ありがとうございました!

別に直さなくてもよかったのに。
プロトタイプ宣言では、引数の型だけ書いてもよいし、
型と変数名を書いてもよいです。

なお、プロトタイプ宣言で
int sentakua(int a);
と書いたからといって、
同関数の定義時も引数の名前をaにしなければならない、
というわけではありません。
まあ、同じにしておくのがわかりやすいですけど。