每次我的程序循环时如何生成一个新的数字?

时间:2012-03-31 10:43:47

标签: c

我正在尝试修改C中的程序,我必须向用户询问某个乘法问题,我使用rand()来生成数字。

如果用户得到错误的答案,那么一旦他们做对了就会要求他们再次输入,当他们做对了,程序应循环并询问用户不同的问题。
每次将2个随机值传递给该函数时,我都会使用单独的函数来生成答案。

我的问题是,一旦我得到正确的答案,程序循环并询问相同的问题,它选择相同的数字!所以我怎么做它每次循环时,它会选择一个不同的数字?

#include <stdio.h>

int multiply(int x, int y);

int main()
{
    srand (time(NULL));
    int x = rand()%20;
    int y = rand()%20;
    int i, answer;
    i = multiply(x,y);

    do {
        printf("what is %d multiplied by %d?:", x, y);
        scanf("%d", &answer);

        while(answer != i)
        {
            printf("wrong try again!");
            scanf("%d", &answer);
        }

        printf("very good!\n");
    } while(i==answer);

}

int multiply(int x, int y)
{
    int k;
    k=x*y;
    return k;
}

2 个答案:

答案 0 :(得分:3)

您需要将xy的分配移动到循环中。通过这种方式,他们将在每一轮中获得新的价值。事实上,你可以在那里移动他们的整个定义。

此外,循环协调while(i==answer)是多余的,因为在这一点上它始终是真的。为了清楚起见,您应该将其替换为true,以使其明确表示它是无限循环。 (并且您可能希望扩展您的程序以优雅地退出,例如,如果输入'q'或空字符串 - 但我会将此作为练习留给您: - )。

 while(true) {
  int x = rand()%20;
  int y = rand()%20;
  int i, answer;
  i = multiply(x,y);

  printf("what is %d multiplied by %d?:", x, y);
  scanf("%d", &answer);

  while(answer != i)
  {
    printf("wrong try again!");
    scanf("%d", &answer);
  }

  printf("very good!\n");
}

答案 1 :(得分:0)

抽象地说,你的逻辑应该是这样的:

// seed random number generator

while (true)  // ask infinitely many questions
{
    int x, y, expected_result;  // populate randomly

    printf("Please compute the result of %d and %d: ", x, y);

    while (read_answer() != expected_result)
    {
         printf("Sorry, wrong answer. Try again: ");
    }
}

即,为每个问题生成新参数。

你只需要实现read_answer()作为辅助函数,从输入中读取一个整数,例如:使用fgetsstrtol