gpt4 book ai didi

c - 为什么这个程序的一部分不能在 Linux 中运行,但可以在 Windows 上运行?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:06:14 25 4
gpt4 key购买 nike

所以我不得不构建一个小游戏,要求玩家选择一个数字,然后看他们是否猜出计算机选择的是什么。它有 2 名玩家,每个玩家都可以将轮到对方。其中一项规定是我的教授正在运行 linux 操作系统,并且说如果它不能在那个操作系统上运行,那就是洗。当我在 codeblocks 中运行代码时,可以找到并执行它应该执行的操作。如果玩家通过并显示输出消息并且转弯切换。

当我在 linux 服务器上运行代码时,它总是将 playTurn()turnInput 评估为“PASS”以外的其他东西,它返回 if( strcmp(turnInput, passValue) == 1) 为 false 并移动到 int turnInputNum = atoi(turnInput);

当我在 Windows 的 codeblocks 上运行它时,它很好并且完全按照它应该的方式运行。当我编译它时,我没有收到任何警告,而且 linux 本身就是一个我以前从未接触过的操作系统。它会传递该代码是否有原因?

#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;
}

}

最佳答案

strcmp有 3 个可能的返回码:

  1. <0
  2. ==0
  3. >0

没有具体==1 ,因此假设您可以说 ==1 是不安全或便携的.使用 >0相反。

这实际上是可移植性和移植问题的一个很好的例子 - 从问题来看,显然是 ==1在 windows 上工作,但将该代码移植到 Linux 并停止。我不确定 Windows 是否记录了“-1、0、1”,或者这是否只是一个碰巧起作用的假设,但正如 OP 发现的那样:“明白了!!”

关于c - 为什么这个程序的一部分不能在 Linux 中运行,但可以在 Windows 上运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40208939/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com