2013-04-26 8 views
1

Итак, я пытаюсь закончить эту программу, и все, что мне нужно сделать, это реализовать какую-то форму ввода для этой карточной игры, но до сих пор все, что я пробовал, просто бесконечно (или до тех пор, пока У меня заканчиваются элементы в массиве), и я не знаю, что я делаю неправильно, как логически, когда я смотрю на свой код, это, кажется, имеет смысл.Если оператор продолжает цикл - c

void players(int deck[]) 
{ 
    int x; 
    int a; 

    a = 1; 

    printf("Player 1 \n"); 
    printf("Your Hand is: \n"); 
    draw(deck, a); 
    draw(deck, a); 
    while(a = 1) 
    { 
    printf("What would you like to do: Press 1 to Draw. 2 to Stay. \n"); 
    scanf("%d" , &x); 
    if(x = 1) 
    { 
      draw(deck, a); 
    } 
    else 
    { 
     a--; 
    } 
    } 
} 

Это вход в вопрос

void draw(int deck[SIZE], int a) 
{ 
    int numCards = 10; 
    int i; 
    int hand[numCards]; 
    int card; 
    for(i = 0; i < numCards && top > 0; i++) 
    { 
     card = deck[top-1];  
     hand[i] = card; 
     top--; 
    } 
    if(a != 0) 
    printcards(card); 
    else 
    for(i = 0; i < numCards && top > 0; i++) 
    printcards(card); 

} 

Это функция Loop работает рисовать карты (printcards отдельная функция, которая печатает только от карты) игроков звонки рисовать, и это работает но, как было заявлено, он будет бесконечно звонить в карты, даже когда я нажимаю 2 (который, как предполагается, должен выйти). Поэтому я не совсем уверен, что я делаю неправильно.

+0

Try 'в то время как (х == 1') вместо этого. То же самое для 'while (a == 1)' – WhozCraig

+0

Вы пробовали переходить через ваш код, строко за строкой, пытаясь выполнить его в своей голове, прочитывая каждое утверждение вслух? –

+0

Я не согласен, что это должно быть закрыто как локализованное? Это обычная ошибка начинающего. Может быть, я что-то упустил? –

ответ

2

Вы не проверяете равенство (оператор ==), вы фактически назначаете значение (оператор =).

if(x = 1){} эквивалентно x = 1; if(x) {}

И if (x) эквивалентно if(x != 0) для целых

+0

BTW, это помеченный вопрос C, поэтому я не уверен, что синтаксис оператора, который вы используете выше, является правильным. Я бы очень хотел, чтобы меня исправили, если я ошибаюсь. –

+0

@MichaelDorgan, да, в C вы можете где-то в коде писать 'operator ==' (например, определить его), но это все еще оператор, поэтому я бы не сказал, что это неверно в тексте – RiaD

6

while(a = 1)

Назначение 1 в a заставит это петли навсегда. Для сравнения вы должны использовать ==. Пожалуйста, включите предупреждения компилятора и исправьте их, поскольку они могли бы легко поймать этот случай.

Кстати, у вас есть такая же ошибка с if(x = 1) заявление, а также ...

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