嘿那里我正在开发一个乐透型游戏,我的一个要求是记录用户输入的数字的频率,然后在用户希望看到它们时显示它们。程序也必须是模块化的,因此功能。
我的问题是,我似乎无法弄清楚如何记录我尝试了很多事情的数字,这是我最接近的......
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”
我真的对下一步做什么一无所知,所以任何和所有的帮助都会受到赞赏。提前谢谢!
编辑:用户可以玩多轮,这就是数字的频率如何加起来。
答案 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