当输入大于 10 时,While 循环会产生致命的运行时错误

While loop creates fatal runtime error when input is bigger than 10

首先,如果这个帖子的标题不够具体,我深表歉意,但我想不出任何方法让标题更具体。

其次,让我解释一下问题是什么。 我目前正在尝试弄清楚如何创建一个循环,该循环将根据需要多次 运行 ,直到它创建的值等于或高于用户给定的数字。我知道这听起来很奇怪,但让我试着让它更清楚。我的程序模拟掷骰子,这意味着结果是随机的(或伪随机,但它与这个问题无关)。我试图制作的循环必须掷骰子,直到加在一起的随机数等于或高于用户输入。因此,假设用户希望将 55 作为输入。循环必须 运行 多次,直到结果总和为 55 或更高。希望这是对标准的足够清楚的解释。

while (turnscore <= input)
roll = (rand() % 6 + 1);
turnscore = turnscore + roll;
printf("You Rolled : %d\n", roll);
turnscore + turnscore;

以上是我创建致命 运行time 错误的循环。我使用了 while 循环,因为我认为对于这个问题它是正确的。我可能错了。 此外,当我将第一行中的逻辑运算符从 (turnscore <= input) 更改为 (turnscore >= input) 时,我的程序只显示:"You rolled 0".

任何线索、提示或想法将不胜感激。 谢谢


好的伙计们,我真的很感谢你的帮助,但我认为我没有很好地解释我的问题,因此我们不在同一页上。让我尝试再次解释问题或程序的目的,以便您了解我的问题所在。

首先,该程序应该是一个掷骰子模拟器。关于程序如何进行,可以有两个不同的标准。第一个是:如果输入的数字小于 10,则掷骰子 X 次,其中 X 是输入的数字。这部分,我已经解决了,而且工作正常。

第二个标准是:如果输入的数字是10或更多,则掷骰子直到该回合的分数等于或高于输入的数字。这部分我有问题,因为我所做的是将我的 for 循环更改为 while 循环(我做错了)并对语法进行了一些更改,但它使程序崩溃并且调试器显示:“fatal 运行时间错误”。

希望这能消除我们之间的误会。 :)

你的代码对我来说毫无意义。这是一个无限循环:

while (turnscore <= input)
roll = (rand() % 6 + 1);

根据您的要求,代码应如下所示:

int roll = 0;
int turnscore = 0;

while (turnscore <= input) {
    roll = rand() % 6 + 1; 
    printf("You rolled %d\n", roll)
    turnscore += roll;
}

printf("Total : %d\n", turnscore);

你的 while 循环后面没有花括号,所以它只适用于紧跟在它后面的语句。由于 turnscore 在该语句中未更改,因此如果 input 大于 6,则会出现无限循环。

正确缩进后,您的代码如下所示:

while (turnscore <= input)
    roll = (rand() % 6 + 1);
turnscore = turnscore + roll;
printf("You Rolled : %d\n", roll);
turnscore + turnscore;

此外,turnscore + turnscore 没有实际效果。您将两个值相加,但没有将它们分配给任何东西。

你可能想要的是这个:

turnscore = 0;
while (turnscore <= input) {
    roll = (rand() % 6 + 1);
    printf("You Rolled : %d\n", roll);
    turnscore = turnscore + roll;
}
printf("Turn score: %d\n", turnscore);

现在的大括号允许 while 循环遍历多个语句而不是一个语句。