C程序在运行时卡住了

时间:2016-01-08 09:20:49

标签: c

好吧所以我在c中创建了一个程序,要求用户选择他想要玩的4个阶段中的1个。在用户选择阶段之后,程序生成一个由4个字符构成的密码和它在1-6之间(例如-3516)。 但我想让chars不重复,所以没有2个数字相同(例如 - 1642它的好,但6632它的坏代码)。 我在我的代码中制作了几个“if”并运行它后,它就堆积了。这是我的代码:

#include <stdio.h>
#include <stdlib.h>

int getStages();
int randCode();

int main()
{
    getStage();

    system("PAUSE");
}

int getStage()
{

    int choice= 0;

    printf("What stage would you like to choose? Choose Wisely: ");
    scanf("%d", &choice);

    randCode();
}

int randCode()
{
    srand(time(NULL));

    int randFirst= rand() % 6 + 1;
    int randSecond= rand() % 6 + 1;
    int randThird= rand() % 6 + 1;
    int randFourth= rand() % 6 + 1;

     while(randFirst = (randSecond || randThird || randFourth))
     {
         int randFirst= rand() % 6 + 1;
     }

     while(randSecond = (randFirst || randThird || randFourth))
     {
         int randSecond= rand() % 6 + 1;
     }

     while(randThird = (randFirst || randSecond || randFourth))
     {
         int randThird= rand() % 6 + 1;
     }

     while(randFourth = (randFirst || randSecond || randThird))
     {
         int randFourth= rand() % 6 + 1;
     }

    char firstNumber= randFirst;
    char secondNumber= randSecond;
    char thirdNumber= randThird;
    char fourthNumber= randFourth;

    printf("%d %d %d %d\n", firstNumber, secondNumber, thirdNumber, fourthNumber);


}

3 个答案:

答案 0 :(得分:0)

  1. = ==相同 a = b表示将b分配给aa == b表示检查a是否等于b

  2. 检查变量是否与多个变量形式表达式等效为

    ((foo == var1) || (foo == var2) || (foo == var3) ...)

  3. while(randFirst = (randSecond || randThird || randFourth))
    

    这导致了问题。

    如果1randFirstrandSecond中的任何一个非零,则此表达式的作用是将randThird分配给randFourth。否则将0分配给randFirst(当所有其他3个变量为0时)

    然后,如果randFirst被分配1(最有可能),则while始终为true,因为在循环中randFirst被分配给while非零数字(1到6)。所以无限循环。

    所有其他剩余的while((randFirst == randSecond) || (randFirst == randThird) || (randFirst == randFourth)) 循环也会发生类似的事情。

    改为使用:

    while

    在所有后续 [Param] param1=value1 param2=value2 param3=value3 [Param] param1=value1 param2=value2 param3=value3 [Param] param1=value1 param2=value2 param3=value3 [Param] param1=value1 param2=value2 param3=value3 [Param] param1=value1 param2=value2 param3=value3 param4=value4 [Param] param1=value1 param2=value2 param3=value3 param4=value4 param5=value5 表达式中。

答案 1 :(得分:0)

您在循环中将变量$this->headScript()->appendFile()声明为randFirst 本地,并使用您拥有的相同名称隐藏其他变量。您在循环中分配的值仅分配给这些循环局部变量。

这当然会对循环条件产生影响(一旦修复它们),因为循环条件将使用函数局部变量。如果你输入一个循环,那个循环将是无限的。

答案 2 :(得分:0)

while looop中的条件总是为真,因此它会变为无限时间,因为(a == b)是比较,其中a = b是赋值,它始终为真。