【发布时间】:2019-07-25 05:39:19
【问题描述】:
我第一次尝试在 C 语言中使用函数。我正在尝试编写一个经典的掷骰子游戏,该游戏掷骰子 10,000 次,然后使用函数打印出每个数字已经掷了多少次.
在下面的代码中,我在尝试设置 result= roll_die (int num_sides); 时不断收到错误代码“预期表达式”。它说它发生在int 上。当我删除int 时,我收到错误代码“使用未声明的标识符'num_sides'”。我该如何解决这个问题?
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int roll_die(int num_sides){
num_sides = rand() % 6;
num_sides = num_sides + 1;
return num_sides;
}
int main(void)
{
srand((int)time(0));
unsigned int counter, result, num1=0, num2=0, num3=0, num4=0, num5=0, num6=0;
unsigned int num_rolls = 10000;
for(counter=0; counter<=num_rolls; counter++)
{
result = roll_die (num_sides);
if(result==1)
num1++;
else if(result==2)
num2++;
else if(result==3)
num3++;
else if(result==4)
num4++;
else if(result==5)
num5++;
else if(result==6)
num6++;
else{
printf("Error occurred. \n"); return 0;
}
}
printf("Number of 1s rolled: %d \n", num1);
printf("Number of 2s rolled: %d \n", num2);
printf("Number of 3s rolled: %d \n", num3);
printf("Number of 4s rolled: %d \n", num4);
printf("Number of 5s rolled: %d \n", num5);
printf("Number of 6s rolled: %d \n", num6);
}
【问题讨论】:
-
您需要将
main()中的num_sides替换为6,或者您需要定义一个变量并将其初始化为6。您还应该使用数组int num[7] = { 0 };,这样您就可以简化代码——我使用了 7,所以你仍然可以将数字 1-6 处理为数组的索引。 -
此外,您的函数将 6 硬编码为边数并忽略传入的值(它只是将参数用作局部变量,忽略作为值提供的内容)。你应该使用更像
int roll_die(int num_sides) { int result = rand() % num_sides + 1; return result; }的东西。 -
@JonathanLeffler 感谢您的帮助。为什么我无法使用
num_sides?我认为它只需要 6 的值并将其传递给主函数 -
错误的控制流——
main()调用roll_die(),反之亦然。在main()中,您没有变量num_sides。roll_die()中有一个,但它是函数本地的,不能从函数外部访问(当roll_die()不是当前函数时,它甚至不存在)。您只是偶尔(大约 6 次中的 1 次)将函数内部的num_sides设置为6。但是,当值被分配给main()中的result时,变量num_sides不再存在——因为roll_die()不再是一个活动函数。 -
"我认为它只需要 6"。怎么做?魔法?