無題

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

無題

#1

投稿記事 by アキ » 16年前

初心者です。
学校の課題で3回勝負のジャンケンのジャンケンの勝敗を判定する関数judge_mentを定義するには、どうすればいいでしょうか。


include <stdio.h
#include <stdlib.h>
#include <time.h>
int main(void)
{
int user, comp, i, uwin = 0, cwin = 0;
printf("じゃんけん3回勝負!\n\n");
srand( (unsigned)time( NULL ) );
for(i = 0; i < 3; i++){
printf("何を出しますか?\n");
printf("1 グー 2 チョキ 3 パー\n");
scanf("%d", &user);
comp = rand() % 3 + 1;
if(comp == 1){
if(user == 1){
printf("あなたはグー。私はグー。ひきわけですね。\n");
}
else if(user == 2){
printf("あなたはチョキ。私はグー。私の勝ちですね。\n");
cwin++;
}
else if(user == 3){
printf("あなたはパー。私はグー。あなたの勝ちです。\n");
uwin++;
}
}
else if(comp == 2){
if(user == 1){
printf("あなたはグー。私はチョキ。あなたの勝ちです。\n");
uwin++;
}
else if(user == 2){
printf("あなたはチョキ。私はチョキ。ひきわけですね。\n");
}
else if(user == 3){
printf("あなたはパー。私はチョキ。私の勝ちですね。\n");
cwin++;
}
}
if(comp == 3){
if(user == 1){
printf("あなたはグー。私はパー。私の勝ちですね。\n");
cwin++;
}
else if(user == 2){
printf("あなたはチョキ。私はパー。あなたの勝ちです。\n");
uwin++;
}
else if(user == 3){
printf("あなたはパー。私はパー。ひきわけですね。\n");
}
}
}
printf("\nあなたの%d勝%d敗%d引き分け\n", uwin, cwin, 3 - uwin - cwin);
return 0;

conio

Re:無題

#2

投稿記事 by conio » 16年前

単純にやると、以下のようになります。
改良の余地はあるので、色々と手を加えてみるのも良いかもしれません。
-----------------------------------------------------------------------------------
int user, comp, i, uwin = 0, cwin = 0; 

void judge_ment(void)
{
	if(comp == 1){ 
		if(user == 1){ 
			printf("あなたはグー。私はグー。ひきわけですね。\n"); 
		}else if(user == 2){ 
			printf("あなたはチョキ。私はグー。私の勝ちですね。\n"); 
		     cwin++; 
		} 
		else if(user == 3){ 
			printf("あなたはパー。私はグー。あなたの勝ちです。\n"); 
		         uwin++; 
		} 
	}else if(comp == 2){ 
		if(user == 1){ 
			printf("あなたはグー。私はチョキ。あなたの勝ちです。\n"); 
			uwin++; 
		}else if(user == 2){ 
			printf("あなたはチョキ。私はチョキ。ひきわけですね。\n"); 
		}else if(user == 3){ 
			printf("あなたはパー。私はチョキ。私の勝ちですね。\n"); 
			cwin++; 
		} 
	}else if(comp == 3){ 
		if(user == 1){ 
		     printf("あなたはグー。私はパー。私の勝ちですね。\n"); 
		          cwin++; 
		}else if(user == 2){ 
		     printf("あなたはチョキ。私はパー。あなたの勝ちです。\n"); 
		          uwin++; 
		}else if(user == 3){ 
		     printf("あなたはパー。私はパー。ひきわけですね。\n"); 
		}
	}
}
int main(void) 
{ 
	printf("じゃんけん3回勝負!\n\n"); 
	srand( (unsigned)time( NULL ) ); 
	for(i = 0; i < 3; i++)
	{ 
		printf("何を出しますか?\n"); 
		printf("1 グー 2 チョキ 3 パー\n"); 
		scanf("%d", &user); 
		comp = rand() % 3 + 1;

		judge_ment();//判定する関数
	}
	printf("\nあなたの%d勝%d敗%d引き分け\n", uwin, cwin, 3 - uwin - cwin); 
	return(0);
}
-----------------------------------------------------------------------------------

初級者

Re:無題

#3

投稿記事 by 初級者 » 16年前

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

int judge_ment(int u,int c)
{
    if (u==c) return 1;
    return (u%3+1==c)?0:2;
}

int main(void)
{
    char *h[/url]={"","グー。","チョキ。","パー。"};
    char *p[/url]={"あなたは","私は" };
    char *r[/url]={"あなたの勝ちです。","引分けです。","私の勝ちですね。",};
    int c,u,res,cwin=0,uwin=0,i;

    srand((unsigned) time(NULL));
    printf("じゃんけん3回勝負!\n");
    for(i=0;i<3;i++) {
        printf("\n何を出しますか?\n");
        printf("1 グー 2 チョキ 3 パー\n");
        scanf("%d",&u);
        c=rand()%3+1;
        printf("%s%s",p[1],h[c]);
        printf("%s%s",p[0],h[[/url]);
        printf("%s\n",r[res=judge_ment(u,c)]);
        if(res==0)uwin++;
        if(res==2)cwin++;
    }
    printf("\nあなたの%d勝%d敗%d引分け\n",uwin,cwin,3-uwin-cwin);
    return 0;
}

sizuma

Re:無題

#4

投稿記事 by sizuma » 16年前

勝敗の判定で同じような処理をしているところがないか考えて、その部分を関数にできないか検討してみては?

僕も初心者で特にCではコードも全然書かないんですが。
やはり最初から他の人が書いた処理を見るよりはできなくても自分で書いてみて、何ができないのかを自分が理解することから始めるべきではないかと思います!

閉鎖

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