みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

C言語のことについて教えてください

C言語のことで教えてください。お願いします

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

int main(int argc, char* argv[]) {
char *data[] = {"おひつじ","おうし","ふたご","かに","しし","おとめ","てんびん",

"さそり","いて","やぎ","みずがめ","うお"};
int data_len = 12; //データの数
char input[10]; //プレイヤーの入力値
int i,p,start;
int win = 1;
int mawari = 1; //内回りの場合は1
int p_turn = 0; //プレイヤーのターン

if ((argc > 1) && (strcmp(argv[1], "-soto") == 0)) {
mawari = 0;
}

srand(time(NULL));

start = rand()%data_len;
printf("古今東西山手線ゲ~ム!\n");
printf("お題:星座の名前\n");
for(p = start,i = 1; i<= data_len; i++,p_turn = !p_turn ) {
sleep(500);
if(p_turn == 0) {printf("コンピューター");}
else if (p_turn == 1) {printf("プレイヤー");}
sleep(500);
printf("ちゃん! >");
if(p_turn == 0) {
printf("%s\n",*(data+p));
} else {

scanf("%s", input);
while (getchar() != '\n') { }
if(strcmp(*(data+p),input) != 0) {
win = 0;

break;
}
}
if(mawari == 1) { p++; } else {p--;}
if((mawari ==1) && (p == data_len)) { p = 0;}
if((mawari ==0) && (p == -1)) {p = data_len-1;}
}
if(win == 1) {printf("あなたの勝ち");}
else {printf("あなたの負け");}
return 0;
}

なんですが、どうしても
}
if(mawari == 1) { p++; } else {p--;}
if((mawari ==1) && (p == data_len)) { p = 0;}
if((mawari ==0) && (p == -1)) {p = data_len-1;}
}
変数Pに今は乱数1-12がはいっているのに、なぜこの処理を行うかがわかりません。どうしてなんですか?教えてください。

投稿日時 - 2010-03-12 01:30:18

QNo.5745018

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

5人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

>printf("%s\n",*(data+p));
>if(strcmp(*(data+p),input) != 0) {

素直に data[p] と書く方がわかりやすいと思います。
いかがでしょうか。

投稿日時 - 2010-03-12 08:52:09

ANo.1

>変数Pに今は乱数1-12がはいっている
違います。
> int data_len = 12; //データの数
> start = rand()%data_len;
> for(p = start,i = 1; i<= data_len; i++,p_turn = !p_turn ) {
なので 、初期値は0~11です。

>なぜこの処理を行うかがわかりません

printf("i=%d,mawari=%d,p=%d -> ",i,nawari,p);
if(mawari == 1) { p++; } else {p--;}
if((mawari ==1) && (p == data_len)) { p = 0;}
if((mawari ==0) && (p == -1)) {p = data_len-1;}
printf("%d\n",p);

として、pがこの前後でどうなるか見てください。
10,11と増えてきたら、その次は0に
2,1,0と減ってきたら、その次は11になるはずです。
pは星座の番号に対応しているので、それがどこから始まってもどっちまわりでも、一周できるようにしているのです。

投稿日時 - 2010-03-12 01:47:47

あなたにオススメの質問