- 締切済み
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がはいっているのに、なぜこの処理を行うかがわかりません。どうしてなんですか?教えてください。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- asuncion
- ベストアンサー率33% (2127/6289)
>printf("%s\n",*(data+p)); >if(strcmp(*(data+p),input) != 0) { 素直に data[p] と書く方がわかりやすいと思います。 いかがでしょうか。
- kmee
- ベストアンサー率55% (1857/3366)
>変数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は星座の番号に対応しているので、それがどこから始まってもどっちまわりでも、一周できるようにしているのです。