我正在创建一个程序,该程序需要一个必须添加到两个骰子上的数字的数字。例如:用户输入9然后输入6 + 3。这两个数字随机生成并继续生成,直到它们等于用户输入的数字。 这是我的代码:
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int totalSought;
int count = 0;
time_t totalTime;
printf("Game of Dice \n");
printf("============ \n");
printf("Enter total sought: ");
scanf("%d", &totalSought);
//if totalsought is higher than 12 the loop keeps asking to re-enter!
if (totalSought > 12) {
printf("** Invalid Input! Try Again! **\n");
while (totalSought > 12) {
printf("Enter total sought: ");
scanf("%d", &totalSought);
}
}
//loads random number generator
srand((unsigned) time(&totalTime));
//this loop checks if rand generates 2 random added equal to totalsought-
//if not equal they keep generating until it equals!
while (rand() % 7 + rand() % 7 != totalSought) {
count++;
printf("Result of the throw %d: %d \n",count, rand() % 7 + rand() % 7 );
}
}
但是当我编译并运行程序时,它并没有停止到我输入的数字。
Game of Dice
============
Enter total sought: 5
Result of the throw 1: 5
Result of the throw 2: 11
Result of the throw 3: 7
Result of the throw 4: 4
Result of the throw 5: 6
它应该在第一次投掷时停止,但事实并非如此。 如何解决此错误?
答案 0 :(得分:2)
循环
while (rand() % 7 + rand() % 7 != totalSought) {
count++;
printf("Result of the throw %d: %d \n",count, rand() % 7 + rand() % 7 );
表示:创建两个随机数,添加它们。如果总和等于 while (rand() % 7 + rand() % 7 != totalSought) {
count++;
printf("Result of the throw %d: %d \n",count, rand() % 7 + rand() % 7 );
}
,则打破循环;否则创建两个(完全无关的)randoms 并打印它们的总和。
答案 1 :(得分:2)
每次调用rand()都会返回一个 new 随机数。 while()语句中的检查结果与您打印的结果无关。对我的代码进行的最小改动(不是最好的)我认为可以使其正常工作:
int r1 = rand()%7;
int r2 = rand()%7;
while ( r1+r2!=totalSought ) {
count++;
printf("Result of the throw %d: %d \n",count, r1 + r2);
r1 = rand()%7;
r2 = rand()%7;
}
答案 2 :(得分:1)
这是由于您构建循环的方式。
//this loop checks if rand generates 2 random added equal to totalsought-
//if not equal they keep generating until it equals!
while (rand() % 7 + rand() % 7 != totalSought) {
count++;
printf("Result of the throw %d: %d \n",count, rand() % 7 + rand() % 7 );
}
请注意,在您调用rand()时,会对其进行评估(两次),然后在printf()中再次调用它。
正在发生的事情是while条件中的结果与printf()中的结果不同。
你应该做的是声明一个变量来存储你的结果,然后在while条件和下面的printf()中使用该变量。
我希望这很清楚:)
答案 3 :(得分:1)
有时创建一个处理骰子滚动的功能,而不是在打印时错误地“重新滚动”。
同样有一点性能提升:产生0到35的随机数,然后分成2个6面骰子。
int SumOf2Dice(int *d1, int *d2) {
int d36 = rand()%36;
*d1 = d36/6 + 1;
*d2 = d36%6 + 1;
return *d1 + *d2;
}
....
int d1, d2;
while (SumOf2Dice(&d1, &d2) != totalSought) {
count++;
printf("Result of the throw %d: %d\n",count, d1 + d2);
}
答案 4 :(得分:0)
while循环中的值与您打印的值不同。
例如,while循环中的值可以是5 并且您打印出来的值可能是7
shutdown.cmd