【问题标题】:Adding Numbers Generated By Random Number Generator in C在 C 中添加由随机数生成器生成的数字
【发布时间】:2015-07-15 08:44:01
【问题描述】:

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

#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);
}

任何帮助、想法或线索将不胜感激。

【问题讨论】:

  • sum初始化为0并将sum = roll+roll改为sum = sum+roll;
  • 该死,我没想到有人这么快回答。现在完美运行,非常感谢。请您给我解释一下这背后的逻辑吗?
  • sum += roll; 更短。
  • @Muffik9 您要添加两次roll 并打印它。这意味着,它只会打印最后一个输入乘以 2(即roll+roll)。执行 sum = sum + roll 将所有输入数字添加到 sum 并将其初始化为 0 是必要的,因为自动变量在 C 中未初始化为 0。
  • 我很确定我理解你的解释。希望我不会再犯同样的错误。非常感谢:)

标签: c random numbers generator


【解决方案1】:

你需要先初始化 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);

}

【讨论】:

    【解决方案2】:

    使用

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

    并初始化变量sum。例如

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

    【讨论】:

      【解决方案3】:

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

      sum = roll+roll;
      

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

      sum = sum + roll;
      

      您需要将 sum 初始化为 0,以便您从仅添加第一卷开始。

      想一想,就像掷骰子多次并写下每次的结果。你掷一次得到 3,所以你记下 3。你再掷一次得到 6,所以你把 6 加到前一次掷出得到 9。你再掷一次得到 2,所以你把 2 加到 9 和得到 11,以此类推。变量sum 是您在每次滚动后写下新数字的地方,但您是在添加之前写下的内容。

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

      【讨论】:

      • 感谢您的帮助和详细解释。我真的很感激:)
      【解决方案4】:

      替换

      sum = roll+roll
      

      sum = roll+sum;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-01-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多