Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何在每次程序循环时生成一个新数字?_C - Fatal编程技术网

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

C 如何在每次程序循环时生成一个新数字?,c,C,我试图纠正C语言中的一个程序,在这个程序中,我必须问用户一个特定的乘法问题,我使用rand()生成数字 如果用户得到错误的答案,那么当他们得到正确答案后,将要求他们再次输入。当他们得到正确答案时,程序应循环并向用户询问不同的问题。 每次将2个随机值传递给该函数时,我都使用一个单独的函数来生成答案 我的问题是,一旦我得到正确的答案,程序就会循环并询问相同的问题,它会选择相同的数字!那么,我如何使它每次循环时,都选择不同的数字呢 #include <stdio.h> int multi

我试图纠正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;
}
#包括
整数乘(整数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,对不起,这是一个遗漏。请参阅我更新的代码示例,它也解决了这个问题。