我正在尝试修改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;
}
答案 0 :(得分:3)
您需要将x
和y
的分配移动到循环中。通过这种方式,他们将在每一轮中获得新的价值。事实上,你可以在那里移动他们的整个定义。
此外,循环协调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()
作为辅助函数,从输入中读取一个整数,例如:使用fgets
和strtol
。