ページ 11

関数が動きません

Posted: 2010年7月05日(月) 23:37
by narica
一時間も経たずに連続投稿申し訳ありません。

現在、選択した数字によって展開が分岐する簡単なアドベンチャーを作っているのですが、下記のプログラムがうまく動作しません。

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

int sentakua(int);
int sentakub(int);

int _tmain(int argc, _TCHAR* argv[/url])
{
int a,b,d,e;

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

sentakua;

if(a==1){
printf("-------------------------------------------------\n");
printf("\"敵\"の反撃!\n"
"\"自分\"は 109 のダメージを受けた!\n"
"-------------------------------------------------\n"
"どうしますか?\n"
"(1:攻撃する,2:様子を伺う,3:回復する,4:逃げる)---");
scanf("%d", &b);
}

else if(a==2){
printf("-------------------------------------------------\n"
"どうしますか?\n"
"(1:攻撃する,2:様子を伺う,3:逃げる)---");
scanf("%d", &d);
}

else if(a==3){
printf("-------------------------------------------------\n"
"どうしますか?\n"
"(1:攻撃する,2:様子を伺う,3:逃げる)---");
scanf("%d", &e);
}

sentakub;

system("pause");
return 0;
}

//-----------------------------------------------------------------------------

int sentakua(int 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;
}

int sentakub(int b){

switch(b){
case 1:
printf("-------------------------------------------------\n"
"\"敵\"にクリティカルヒット!\n"
"\"敵\"に 126 のダメージを与えた!!\n");
break;

case 2:
printf("-------------------------------------------------\n"
"\"敵\"はキズを舐めてダメージを回復した!\n");
break;

case 3:
printf("-------------------------------------------------\n"
"\"自分\"は手持ちの薬草を使った!\n"
"HPを 68 回復した!\n");
break;

case 4:
printf("-------------------------------------------------\n"
"うまく逃げ切れた!\n"
"---END---\n");
system("pause");
return 0;

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

return 0;
}


最初に 1 を選択すると、 sentakua はきちんと動作するのですが、2回目の 1 を選択すると sentakub がうまく動作しません。
どうすれば sentakub がうまく動作するのか教えて頂けると助かります。

Re:関数が動きません

Posted: 2010年7月05日(月) 23:44
by パコネコ
選択aって起動してますか?
aの値を渡しているように見えないんですが…
違ったらすいません

Re:関数が動きません

Posted: 2010年7月05日(月) 23:49
by シエル
sentakua(&a)
sentakub(&b)
↑この二つの関数へはa,bそれぞれのアドレスを渡すようにします。

int sentakua(int *a)
int sentakub(int *b)
↑そしてこの関数は、上記のようにint型のポインタで受け取ります


switch(*a){
}
↑そしてswitch文のaは*a、bは*bとして下さい。

意味が分からなければ、値渡し、参照渡し、ポインタを勉強して下さい。


追記:
一部修正しました。
画像

Re:関数が動きません

Posted: 2010年7月06日(火) 00:02
by 白い時空
sentakuaをsentakua(a)に
sentakubをsentakub(b)にしてください。

シエルさんはポインタを使っていますが、
sentakua関数・sentakub関数ではa,bの値を変更しないため
ポインタを使う必要はないと思います。

Re:関数が動きません

Posted: 2010年7月06日(火) 00:10
by シエル
そのとおりです。まったくポインタを使う必要はありませんでした。
白い時空さんがおっしゃってるようにa,bの値をそのまま渡すだけで良いです。

Re:関数が動きません

Posted: 2010年7月06日(火) 00:12
by narica
パコネコさん:返答ありがとうございます!
すいません・・・起動してませんでした。

シエルさん:返答ありがとうございます!
意味はわかりませんでしたが、今後のために勉強しようと思います。
ご指摘ありがとうございます。

白い時空さん:返答ありがとうございます!
無事に動きました!
ありがとうございます!