随机生成的数字与while循环无法正常工作

时间:2015-11-03 23:54:06

标签: c

我正在创建一个程序,该程序需要一个必须添加到两个骰子上的数字的数字。例如:用户输入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

它应该在第一次投掷时停止,但事实并非如此。 如何解决此错误?

5 个答案:

答案 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