だから私は、プレイヤーに数字を選び、コンピュータが何を選んだのかを推測するかどうかを尋ねる小さな小さなゲームを構築しなければならなかった。それは2人のプレイヤーを持ち、それぞれが他のプレイヤーに自分のターンを渡すことができます。 私の教授がLinux OSを実行していて、それがうまくいけばそれは洗いだと言われています。私がcodeblocksでコードを実行すると、findは動作し、それがするべきことを正確に実行します。プレイヤーが通過して出力メッセージが表示され、ターンが切り替わります。私はLinuxサーバ上でコードを実行するとなぜこのプログラムのチャンクはLinuxではなくWindows上で動作しますか?
は、それは常に私はそれがのWindows上でコードブロックの上にそれを実行するとint turnInputNum = atoi(turnInput);
へif(strcmp(turnInput, passValue) == 1)
としてfalseを返す「PASS」以外の何かと動くようplayTurn()
のturnInput
を評価しますそれはまさにそれがすべきことです。私がそれをコンパイルしたときに、私は何の警告も得ず、Linux自体は以前は本当に扱ったことのないOSです。そのコードを通過する理由はありますか?
<0
==0
>0
は特段==1
ありません、そしてそれが安全かに移植することはできません。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include <stdbool.h>
struct player{
int passNum;
int currentPassNum;
bool myTurn;
};
struct player player1;
struct player player2;
int turn = 1; //holds the games current turn
int input; //holds the number input by player to indicate which player it is
int RN; //holds Random Number
int actualNum = -1; //signals completion of game by ending while loop
void playTurn(void);
int main() {
player1.currentPassNum = 0;
player1.passNum = 0;
player1.myTurn = true;
player2.currentPassNum = 0;
player2.passNum = 0;
player2.myTurn = false;
RN = generateRandom();
while(RN != actualNum){
printf("\nEnter Player Number: ");
scanf("%d", &input);
if(input == turn){
playTurn();
if(turn == 1 && player1.myTurn == false){
turn = 2;
}
else{
turn = 1;
}
}
else{
printf("You have to wait your turn");
}
}
return 0;
}
int generateRandom(){
int n;
srand(time(NULL));
n = rand() % 100 + 1;
return n;
}
void playTurn(){
char turnInput[4];
char passValue[4] = "PASS";
int passes;
printf("Enter your guess: ");
scanf("%s", &turnInput);
if(strcmp(turnInput, passValue) == 1){ <---- not running when PASS
if(input == 1){
if(player1.currentPassNum > 0){
player1.currentPassNum = 0;
player1.myTurn == true;
printf("You may not pass!");
return;
}
else{
passes = player1.passNum;
player1.passNum = player1.passNum + 1;
player1.currentPassNum = 1;
player1.myTurn = false;
printf("Player 1 Passes to Player 2");
return;
}
}
if(input == 2){
if(player2.currentPassNum > 0){
player2.currentPassNum = 0;
printf("You may not pass!");
return;
}
else{
passes = player2.passNum;
player2.passNum++;
player2.currentPassNum++;
printf("Player 2 Passes to Player 1");
return;
}
}
if(passes > 3){
printf("You can't pass anymore");
return;
}
}
int turnInputNum = atoi(turnInput); <---- Jumping to here every time
if(turn == 1){
player1.currentPassNum = 0;
player1.myTurn = false;
}
else{
player2.currentPassNum = 0;
player1.myTurn = true;
}
if(turnInputNum > RN){
printf("Too High");
return;
}
if(turnInputNum < RN){
printf("Too Low");
return;
}
if(turnInputNum == RN){
printf("CORRECT");
actualNum = RN;
return;
}
}
誰が 'if(strcmp(turnInput、passValue)== 1)'を使うと言ったのですか? 'strcmp'は' <0'、 '== 0'、'> 0'を扱います。リターンコード1の具体的な言及はありません。それは確かに安全で可搬性のある仮定ではありません。 – John3136
'char passValue [4] =" PASS ";' - > 'char passValue [5] =" PASS ";' – BLUEPIXY
@ John3136うまくいきました。これは文字通り私がCで書いた最初のプログラムであり、多くの機能が不明です。あなたが答えたら私はそれを正しいものとしてマークします –