如何在此代码中使用静态局部变量?

时间:2019-05-04 01:39:16

标签: c

我们的任务是编写一个代码,每掷骰子都会产生1-6范围内的随机数。将骰子“滚动” 50次,并记录骰子落在1-6的某个数字上的次数。

但是我们需要使用静态局部变量,而且我无法让该程序记录生成某个数字的次数。输出应该是每当生成一个数字(例如5)时,freq5等于1并在再次生成数字5时增加。

#include <stdio.h>;
void get_dice_face();

int main(void)
{
    int i;
    printf("주사위 던지기 시작합니다\n");
    for (i = 0; i < 50; i++)
        get_dice_face();
    return 0;
}

void get_dice_face()
{
    int face;
    static int freq1 = 0, freq2 = 0, freq3 = 0, freq4 = 0, freq5 = 0, freq6 = 0;

    face = 1 + rand() % 6;
    printf("현재 주사위 면: %d\n", face);
    printf("면 별 나온 횟수: \n");

    switch (face)
    {
        case '1':
            freq1++;
            break;
        case '2':
            freq2++;
            break;
        case '3':
            freq3++;
            break;
        case '4':
            freq4++;
            break;
        case '5':
            freq5++;
            break;
        case '6':
            freq6++;
            break;
    }

    printf("1: %d\t2: %d\t3: %d\t4: %d\t5: %d\t6: %d\n\n", freq1, freq2, freq3, freq4, freq5, freq6);

}

3 个答案:

答案 0 :(得分:3)

在switch语句中,您正在将face值与字符常量'1'而不是整数值1进行比较。只需更改为:

switch (face)
{
    case 1:
        freq1++;
        break;
    case 2:
        freq2++;
        break;
    ...
}

答案 1 :(得分:2)

只需删除转换案例中的引号即可。

您正在生成随机整数,但您的转换案例检查字符。您的问题与静态变量无关。

答案 2 :(得分:-4)

在每次调用get_dice_face()时,您都将freq1,freq2等设置为零,这就是为什么他们不记录您的50卷结果的原因