ページ 11

さいとう

Posted: 2011年7月06日(水) 15:00
by 逆から表示していくプログラム
初めてここに書き込みをさせていただきますさいとうと申します。
自分のスペックとしましてはC言語を初めて約1カ月程のほぼ初心者です。
現在課題を消化しているのですが、プログラムでうまくいかないところがあり教えていただければとトピ立てさせていただきました。

山手線ゲーム方式でCPUからはじまり、プレイヤーと交互に回答していって最後まで間違わなければプレイヤーの勝ちというプログラムです。
ただ、普通にやる分には問題ないんですが逆回りでのプレイができずどこが悪いのかがわかりません。
どこがどういう風に足りないのか、もしくは多いのか教えていただければと思います。
よろしくお願いします。

コード:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

int main(int argc,char* argv[])
{
	char *eto[] = {"ねずみ","うし","とら","うさぎ","りゅう","へび",
					"うま","ひつじ","さる","とり","いぬ","いのしし"};
	int eto_len = 12;
	char input[10];
	int i,p,start,win,tokei;
	int p_turn = 0;
	win = tokei = 1;

	if((argc > 1) && (strcmp(argv[1],"gyaku") == 0))
	{
		tokei = 0;
	}
	
	srand(time(NULL));
	start = rand()%eto_len;
	
	
	puts("干支の名前で山の手線ゲームを行います");
	puts("干支を一周、間違えることなく答えると貴方の勝ちです");
	puts("短縮されてるものは以下の通りに入力してください。");
	puts("み→へび、う→うさぎ、い→いのしし、たつ→りゅうで入力");
	puts("エンターキーを押すとスタートします\n");
	
	rewind(stdin);
	getchar();
	
	for(p = start,i = 1;i <= eto_len;i++,p_turn = !p_turn)
	{
		if(p_turn == 0)
		{
			printf("コンピューター:");
		}
		else if(p_turn == 1)
		{
			printf("プレイヤー:");
		}
		if(p_turn == 0)
		{
			printf("%s\n",*(eto+p));
		}
		else
		{
			scanf("%s",input);
			while(getchar() != '\n');
			if(strcmp(*(eto+p),input) != 0)
			{
				win = 0;
				break;
			}
		}
		if(tokei == 1)
		{
			p++;
		}
		else
		{
			p--;
		}
		if((tokei == 1) && (p == eto_len))
		{
			p = 0;
		}
		if((tokei == 0) && (p == -1))
		{
			p = eto_len -1;
		}
	}
	if(win == 1)
	{
		puts("あなたが勝ちました!");
	}
	else
	{
		puts("あなたの負けです");
	}
	return 0;
}

削除できないようなので

Posted: 2011年7月06日(水) 15:08
by さいとう
解決であげさせていただきます。
どうもコンパイルする時にスペースを全角で実行してたのが悪かったようです;
半角にしたら実行できました。
お騒がせしました