在 C 中添加由随机数生成器生成的数字

Adding Numbers Generated By Random Number Generator in C

在我提出问题之前,我想指出我确实已经在寻找答案,但我没有找到我要找的东西。 请记住,我是编程方面的初学者,所以请不要以为我什么都知道。 对了,正题。 我的问题是:如何将 运行dom 数字生成器创建的数字加在一起?我遇到的困难是每次程序 运行 时 运行domly 生成的数字的数量可能不同。为了更清楚地说明,运行domly 生成的数字的数量取决于用户的输入,例如,如果输入是 9,程序将生成 9 个 运行dom 数字。这让我很难想出如何将 运行dom 数字加在一起并显示它们的想法。 这是我程序的源代码。我认为重要的是要提到每次我 运行 程序时 运行dom 数字都会改变,这就是我希望它们成为的样子(我随时间使用了 s运行d() , 和 运行d() )。此外,我目前遇到的问题是程序将最后一个 运行domly 生成的数字加倍,而不是将它们全部加在一起。

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

int main(void)
{
    int input;
    scanf("%d", &input);
    int i;
    int roll;
    int turn_total;
    time_t t;
    int sum;

    srand((unsigned) time(&t));             // the seed for the random number generator based on the current time

    for( i = 0; i < input; i++)
    {
        roll = (rand() % 6 + 1);            // random number generator 
        sum = roll+roll;                    // only dubbling the last roll for some reason = /
        printf("You Rolled : %d\n", roll);
    }

    printf("The Total Turn Score is : %d", sum);
}

如有任何帮助、想法或线索,我们将不胜感激。

你需要先初始化总和,而且你没有正确添加。

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

int main(void)
{
int input;
scanf("%d", &input);
int i;
int roll;
time_t t;
int sum = 0;

srand((unsigned) time(&t));                                 // the seed for    the random number generator based on the current time


for( i = 0; i < input; i++)
{
roll = (rand() % 6 + 1);                                    // random number generator 
  sum += roll;                                              // only dubbling the last roll for some reason = /
printf("You Rolled : %d\n", roll);
}

    printf("The Total Turn Score is : %d", sum);

}

使用

srand( ( unsigned int )time( NULL ) ); 

并初始化变量sum。例如

long long int sum = 0;

//...
sum += roll;
//...      
printf( "The Total Turn Score is : %lld", sum );

您的程序将生成的数字加倍,因为这是您在这一行中告诉它要做的:

sum = roll+roll;

相反,您需要将当前 roll 添加到 sum 的当前值:

sum = sum + roll;

并且您需要将 sum 初始化为 0,这样您就可以只添加第一个卷。

把它想象成多次掷骰子并写下每次的结果。你掷一次,得到 3,所以你记下 3。你再掷一次,得到 6,所以你将 6 添加到上一次掷中得到 9。你再次掷骰得到 2,所以你将 2 加到 9,然后得到11,依此类推。变量 sum 是您在每次滚动后记下新数字的地方,但您是在添加之前记下的数字。

你以前的方式,完全无视以前的卷。循环中的 rolls 仅指您执行的最新掷骰,并且由于循环在某个时刻结束,因此 sum 将保留为 roll 的最后一个值的总和。这就是为什么你得到最后一个数字的两倍。

替换

sum = roll+roll

sum = roll+sum;