2013-10-03 7 views
0

Итак, я пишу эту программу как двухскатную игрушку из бумажных скальных ножниц, и независимо от того, что выбирает каждый игрок, выход «Побеждает игрок 1».Тот же выход, независимо от ввода

#include <stdio.h> 
int main(void) 
{ 
long player1Choice, player2Choice, p, r, s; 


     printf("Player 1, enter paper (p), rock (r), or scissors (s)\n"); 
      player1Choice=getchar(); 
      getchar(); 

     printf("Player 2, enter paper (p), rock (r), or scissors (s)\n"); 
      player2Choice=getchar(); 
      getchar(); 

     if((player1Choice=p)&&(player2Choice=r))  
      printf("Player 1 wins!\n"); 
     else if((player1Choice=r)&&(player2Choice=p)) 
      printf("Player 2 wins!\n"); 
     else if((player1Choice=r)&&(player2Choice=s)) 
      printf("Player 1 wins!\n"); 
     else if((player1Choice=s)&&(player2Choice=r)) 
      printf("Player 2 wins!\n"); 
     else if((player1Choice=s)&&(player2Choice=p)) 
      printf("PLayer 1 wins!\n"); 
     else if((player1Choice=p)&&(player2Choice=s)) 
      printf("Player 2 wins!\n"); 


    printf("Press any key to exit"); 
    getchar(); 
    return 0; 
} 

Я думаю, что логическое «и» S в моем «если» заявления могут быть причиной проблемы, но я не уверен.

+1

Это как 20-й вопрос о RPS за последние 2 дня. Школа где-то началась? :) – zubergu

ответ

2

Вам не хватает одиночных кавычек вокруг ваших символьных констант, а также с использованием =, когда вам нужно ==. Так измените, например.

if((player1Choice=p)&&(player2Choice=r))  

к:

if((player1Choice=='p')&&(player2Choice=='r'))  

Сделайте это для всех подобных случаев.

Также избавиться от неиспользованной переменной, r, p и s.

И, наконец, включите предупреждения компилятора и обратите внимание на них - компилятор помог бы вам устранить все эти проблемы, если бы вы это допустили.

1

Вы указали p, r и s, но вы никогда не инициализируете их. Вы также используете назначение (=), а не тест на равенство (==). Ваша программа вызывает неопределенное поведение. Похоже, вы хотели что-то вдоль линий:

if ((player1Choice == 'p') && (player2Choice == 'r')) 

После фиксации тех, вы можете избавиться от паразитных переменных. С другой стороны, изменить объявление переменного включать инициализацию:

long player1Choice, player2Choice, p = 'p', r = 'r', s = 's'; 

Вам все равно нужно исправить = проблемы.

Вы должны включить дополнительные предупреждения в свой компилятор. Например, для вашей программы от Clang:

$ clang -Wall example.c -o example 
example.c:19:51: warning: variable 's' is uninitialized when used here 
     [-Wuninitialized] 
     else if((player1Choice=r)&&(player2Choice=s)) 
               ^
example.c:4:43: note: initialize the variable 's' to silence this warning 
long player1Choice, player2Choice, p, r, s; 
             ^
              = 0 
example.c:15:27: warning: variable 'p' is uninitialized when used here 
     [-Wuninitialized] 
     if((player1Choice=p)&&(player2Choice=r))  
         ^
example.c:4:37: note: initialize the variable 'p' to silence this warning 
long player1Choice, player2Choice, p, r, s; 
            ^
            = 0 
example.c:15:46: warning: variable 'r' is uninitialized when used here 
     [-Wuninitialized] 
     if((player1Choice=p)&&(player2Choice=r))  
              ^
example.c:4:40: note: initialize the variable 'r' to silence this warning 
long player1Choice, player2Choice, p, r, s; 
            ^
             = 0 
3 warnings generated. 
+2

Он также использует назначение, а не сравнение ... – nhgrif

+0

Спасибо, ребята, - это полностью проскользнуло мимо меня. –

Смежные вопросы