C 如何在每次程序循环时生成一个新数字?
我试图纠正C语言中的一个程序,在这个程序中,我必须问用户一个特定的乘法问题,我使用rand()生成数字 如果用户得到错误的答案,那么当他们得到正确答案后,将要求他们再次输入。当他们得到正确答案时,程序应循环并向用户询问不同的问题。C 如何在每次程序循环时生成一个新数字?,c,C,我试图纠正C语言中的一个程序,在这个程序中,我必须问用户一个特定的乘法问题,我使用rand()生成数字 如果用户得到错误的答案,那么当他们得到正确答案后,将要求他们再次输入。当他们得到正确答案时,程序应循环并向用户询问不同的问题。 每次将2个随机值传递给该函数时,我都使用一个单独的函数来生成答案 我的问题是,一旦我得到正确的答案,程序就会循环并询问相同的问题,它会选择相同的数字!那么,我如何使它每次循环时,都选择不同的数字呢 #include <stdio.h> int multi
每次将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;
}
#包括
整数乘(整数x,整数y);
int main()
{
srand(时间(空));
int x=rand()%20;
int y=rand()%20;
int i,答案;
i=乘(x,y);
做{
printf(“什么是%d乘以%d?:”,x,y);
scanf(“%d”和“应答”);
while(答案!=i)
{
printf(“错误,再试一次!”);
scanf(“%d”和“应答”);
}
printf(“非常好!\n”);
}而(i==答案);
}
整数乘法(整数x,整数y)
{
int k;
k=x*y;
返回k;
}
您需要将x
和y
的赋值移动到循环中。这样,他们将在每一轮中获得一个新值。事实上,你可以把他们的整个定义移到这里
此外,循环条件而(i==answer)
是多余的,因为在这一点上它总是会是真的。为了清楚起见,您应该将其替换为true
,以明确它是一个无限循环。(您可能希望通过一种方式扩展您的程序以优雅地退出,例如,如果输入了'q'
或空字符串-但我将把此作为练习留给您:-)
您需要将
x
和y
的赋值移动到循环中。这样,他们将在每一轮中获得一个新值。事实上,你可以把他们的整个定义移到这里
此外,循环条件而(i==answer)
是多余的,因为在这一点上它总是会是真的。为了清楚起见,您应该将其替换为true
,以明确它是一个无限循环。(您可能希望通过一种方式扩展您的程序以优雅地退出,例如,如果输入了'q'
或空字符串-但我将把此作为练习留给您:-)
抽象地说,您的逻辑应该是这样的:
// 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
抽象地说,您的逻辑应该是这样的:
// 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
您的do位于错误的位置!将if置于sr之后,
您的do位于错误的位置!将if置于srand
im收到这些错误multi.c:In函数'main':multi.c:26:10:error:'i'未声明(首次在此函数中使用)multi.c:26:10:注意:对于multi中出现的每个函数,每个未声明的标识符只报告一次。c:26:13:error:'answer'未声明(首次在此函数中使用)我把我的声明和答案移到了外面,现在它工作正常了。谢谢:)@user1304516,对不起,这是遗漏。请参阅我更新的代码示例,它也解决了这个问题。我在函数“main”中收到了这些错误multi.c:In:multi.c:26:10:error:“i”未声明(首次在此函数中使用)multi.c:26:10:注意:对于multi.c:26:13中出现的每个函数,每个未声明的标识符只报告一次。c:26:13:error:“answer”未声明(此函数首次使用)我将i和answer的声明移到了外部,现在工作正常。谢谢:)@user1304516,对不起,这是一个遗漏。请参阅我更新的代码示例,它也解决了这个问题。