如何使用C中的功能记录用户输入的数字的频率

时间:2018-03-11 15:00:54

标签: c arrays function loops frequency

嘿那里我正在开发一个乐透型游戏,我的一个要求是记录用户输入的数字的频率,然后在用户希望看到它们时显示它们。程序也必须是模块化的,因此功能。

我的问题是,我似乎无法弄清楚如何记录我尝试了很多事情的数字,这是我最接近的......

void num_free(int *picked_nums)
{
    static int elements[MAX] = { 0 };
    int i;

    for (i = 0; i < MAX; i++)
        if (*(picked_nums + i) == i)
        {
            elements[i]++;
        }

    for (i = 0; i < MAX; i++)
    {
        if (elements[i] != 0)
        {
            printf("\nThe amount of times you chose %d is %d", i, elements[i]);
        }
    }

    printf("\nEnter any key to return to main menu");
    getchar();
}

每次运行它的输出无论输入是

“您选择11的次数是1”

我真的对下一步做什么一无所知,所以任何和所有的帮助都会受到赞赏。提前谢谢!

编辑:用户可以玩多轮,这就是数字的频率如何加起来。

2 个答案:

答案 0 :(得分:1)

我认为代码中存在的主要问题是:

if (*(picked_nums + i) == i)
{
    elements[i]++;
}

你实际检查用户选择的第i个号码是否等于i。这意味着增量仅在这种情况下完成 - 这不是你想要的(如果我帮你做对)。

我认为你应该放弃if语句,假设用户只选择非负数(并且elements数组在开头正确归零),请执行以下操作:

elements[picked_nums[i]]++;

即,增加与所选数字匹配的数组单元格(i只是用于迭代picked_num数组的索引)。

答案 1 :(得分:0)

问题在于如何计算和存储数字:

if (*(picked_nums + i) == i)
{
    elements[i]++;
}

您的i正在移动,同时从picked_nums中选择的元素正在移动。此循环不会计数或存储正确。

提供的解决方案假定所选数字存储在numbers数组中。我假设数字在1到64范围内。您可以根据需要调整程序。测试提供:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void num_free(int picked_nums[], int size )
{
    static int elements[65] = { 0 }; // numbers can be from 1 to 64 range
    int i;

    for (int j = 0; j < size; j++)
    {
        int n = picked_nums[j];

        for (i = 1; i < 65; i++)   // numbers can be from 1 to 64 range
        {  
            if ( n == i)
            {
                elements[i] = elements[i]+1;
            }
        }
    }

    for (i = 0; i < 65; i++)
    {
        if (elements[i] != 0)
        {
            printf("\nThe amount of times you chose %d is %d", i, elements[i]);
        }
    }

   // printf("\nEnter any key to return to main menu");
   // getchar();
}

// array of entered numbers:
int numbers[] = { 2, 2, 2, 40, 7, 7, 8, 9, 40 };

int main(void) {

    num_free(numbers, 9); // call with sizeof numbers

    return 0;
}

测试:

The amount of times you chose 2 is 3                                                                                                          
The amount of times you chose 7 is 2                                                                                                          
The amount of times you chose 8 is 1                                                                                                          
The amount of times you chose 9 is 1                                                                                                          
The amount of times you chose 40 is 2