【问题标题】:If statement keeps looping - c [closed]如果语句不断循环-c [关闭]
【发布时间】:2013-04-21 04:57:53
【问题描述】:

所以我正在尝试完成这个程序,我需要做的就是为这个纸牌游戏实现某种形式的用户输入,但到目前为止,我尝试的所有内容都在无休止地循环(或者直到我用完数组),当我查看我的代码时,我不知道我在逻辑上做错了什么,这似乎是有道理的。

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 是一个单独的函数,只打印牌)玩家调用 draw 并且它可以工作,但正如所述,即使我按 2 也会无休止地调用牌(假设退出)。所以我不完全确定我做错了什么。

【问题讨论】:

  • 改用while (x == 1)。 while (a == 1) 相同
  • 您是否尝试过逐行单步执行您的代码,尝试在脑海中执行它,大声朗读每个语句?
  • 我不同意这应该作为本地化关闭?这是一个常见的初学者错误。也许我在这里遗漏了什么?

标签: c function loops if-statement


【解决方案1】:

您不检查相等性(运算符==),您实际上分配了值(运算符=)。

if(x = 1){} 等价于x = 1; if(x) {}

对于整数,if (x) 等价于 if(x != 0)

【讨论】:

  • 顺便说一句,这是一个标记为 C 的问题,所以我不确定您上面使用的运算符语法是否正确。如果我错了,我很乐意得到纠正。
  • @MichaelDorgan,是的,在 C 语言中,您可以在代码中的某处编写 operator ==(例如定义它)但它仍然是运算符,所以我不会说它在文本中不正确
【解决方案2】:

while(a = 1)

1 分配给a 将导致它永远循环。您应该使用 == 代替进行比较。请打开编译器警告并修复它们,因为它们很容易发现这种情况。

顺便说一句,你的if(x = 1) 语句也有同样的错误......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多