2012-11-30 90 views
1

我正在編寫客戶端服務器的網絡編程項目Rock Paper Scissors代碼。我完成了代碼,在測試過程中它運行良好,然後將此行添加到代碼中。帶分段的客戶端服務器代碼錯誤錯誤

findWinner(gameType,pcChoice); 

當我將代碼行添加到代碼時,代碼開始給我一個關於來自服務器端的分段錯誤的錯誤。這是我添加該行的地方。

while(1) 
{ 
    int gameType; 
    printf("Paper, Scissors, Rock game start.\n"); 

    rc = read(client_sockfd, &gameType, 1);  
srand(time(NULL)); 
pcChoice = (rand() % 3)+1; 
findWinner(gameType,pcChoice); 
    gameType = pcChoice; 
    write(client_sockfd, &gameType, 1); 

} 

我是C中的一個熟人,不知道該怎麼做。

int pcChoice; 

它是一個整數,以保持一個隨機整數1至3個(巖紙或剪刀)

findwinner():

void findWinner(int player,int pc) 
{ 
const char *items[3]={"Paper","Scissors","Rock"}; 
printf("Client: %s\n",items[player-1]); 
printf ("Computer: %s\n",items[pc-1]); 

switch (player) 
{ 
    case 1: 
     switch (pc) 
     { 
      case 1: 
       printf("it is a DRAW\n"); 
       break; 
      case 2: 
       printf("Computer Wins\n"); 
       break; 
      case 3: 
       printf("Computer Loses\n"); 
       break; 
      default: 
       printf("ERROR\n"); 
       exit(0); 
     }; 
     break; 
    case 2: 
     switch (pc) 
     { 
      case 1: 
       printf("Computer Loses\n"); 
       break; 
      case 2: 
       printf("it is a DRAW\n"); 
       break; 
      case 3: 
       printf("Computer Wins\n"); 
       break; 
      default: 
       printf("ERROR\n"); 
       exit(0); 
     }; 
     break; 
    case 3: 
     switch (pc) 
     { 
      case 1: 
       printf("Computer Wins\n"); 
       break; 
      case 2: 
       printf("Computer Loses\n"); 
       break; 
      case 3: 
       printf("it is a draw\n"); 
       break; 
      default: 
       printf("ERROR\n"); 
       exit(0); 
     }; 
     break; 
    default: 
     printf("ERROR\n"); 
     exit(0); 
} 
} 
+4

現在可能是學習如何使用調試器的好時機。 – melpomene

+0

請提供findWinner函數代碼以及pcChoice的類型和用法信息。 – Jay

+0

我編輯了問題 – femchi

回答

2
while(1) 
{ 
    int gameType; 
    printf("Paper, Scissors, Rock game start.\n"); 

    rc = read(client_sockfd, &gameType, sizeof(gameType));  
    srand(time(NULL)); 
    pcChoice = (rand() % 3)+1; 
    findWinner(gameType,pcChoice); 
    gameType = pcChoice; 
    write(client_sockfd, &gameType, sizeof(gameType)); 

} 

其他事情可能是有問題的是:

嘗試顯式null終止char*

const char *items[3]={"Paper\0","Scissors\0","Rock\0"}; 

你確定玩家從不消極或大於3嗎?

printf("Client: %s\n",items[player-1]); 
printf ("Computer: %s\n",items[pc-1]); 
+0

是的。客戶除了1,2或3以外不能發送任何內容...但是它正在編程。我不能確定:D – femchi

+1

將printfs置於註釋中,並將while(1)改爲我放入的內容並查看發生了什麼 – 0x90

+0

顯式空終止?爲什麼? –

相關問題