2012-11-30 2 views
1

네트워크 프로그래밍 프로젝트에서 클라이언트 서버를 작성하고 있습니다 Rock Paper Scissors code. 나는이 코드를 코드에 추가하기 전에 코드를 끝내고 테스트 중에 잘 작동했다.세그먼트 화 된 클라이언트 서버 코드 오류 오류

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의 애국가이며 무엇을 해야할지 알지 못합니다. 문제가 될 수

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

Pls는 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)); 

} 

다른 일을 :

int pcChoice; 

은 1에서 3 (바위 종이 가위)

findwinner()에 임의의 정수를 유지하는 정수 위치 :

명시 적 null 종료 시도 char*

플레이어가 음수가 아니거나 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

명시 적 null 종료? 왜? –