好吧所以我在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);
}
答案 0 :(得分:0)
=
与==
相同
a = b
表示将b
分配给a
。
a == b
表示检查a
是否等于b
。
检查变量是否与多个变量形式表达式等效为
((foo == var1) || (foo == var2) || (foo == var3) ...)
while(randFirst = (randSecond || randThird || randFourth))
这导致了问题。
如果1
,randFirst
或randSecond
中的任何一个非零,则此表达式的作用是将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是赋值,它始终为真。