c - 创建一个随机数组并检查用户输入是否在其中
问题描述
我是 C 的初学者,我必须编写一个程序来创建一个随机数在 0-100 之间的数组(用户选择大小 50/100/150)。然后用户将输入一个输入,程序将检查它是否存在于数组中。我写了这样的东西,但是运行时它崩溃了。
#include<stdio.h>
#include <time.h>
void populateArray(int *arr, int size)
{
srand(time(NULL));
int i;
for(int i = 0; i < size; ++i)
{
arr[i] = rand() % 100 + 1;
}
}
int check (int *arr, int size, int m)
{
int i;
for(i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
{
if(arr[i] == m)
return 1;
}
return 0;
}
int main()
{
int difficulty;
int m;
int size;
int result;
int arr[size];
printf("Press 0 for beginner\nPress 1 for intermediate\nPress 2 for advanced");
printf("Enter the difficulty level of the game:");
scanf("%d", &difficulty);
if (difficulty == 0)
{
size = 150;
populateArray(arr, size);
}
if (difficulty == 1)
{
size = 100;
populateArray(arr, size);
}
if (difficulty == 2)
{
int size = 50;
populateArray(*arr, size);
}
printf("Enter your guess (between 0 and 100): ");
scanf ("%d", &m);
check (arr, size, m);
result = check;
if (result == 1)
{
printf("Congrats! You win!");
}
else
{
printf("Gameover!");
}
}
解决方案
check (arr, size, m);
result = check;
我想你的意思如下:
result = check (arr, size, m);
arr
因为每个选项的大小变化fifficulty
,所以你应该使用指针int * arr
而不是int arr[size]
。因为,在你的代码size
中没有初始化,所以你不能声明int arr[size]
.
当您声明:int *arr
您必须为arr
每个difficulty
选项分配:
if (difficulty == 0)
{
size = 150;
arr = malloc(size * sizeof(int));
if(!arr) {
// handle error
return -1;
}
populateArray(arr, size);
}
if (difficulty == 1)
{
size = 100;
arr = malloc(size * sizeof(int));
if(!arr) {
// handle error
return -1;
}
populateArray(arr, size);
}
if (difficulty == 2)
{
int size = 50;
arr = malloc(size * sizeof(int));
if(!arr) {
// handle error
return -1;
}
populateArray(arr, size);
}
arr
在 main 函数结束时不要忘记 free :
free(arr);
OT,intpopulateArray
函数,不需要声明变量int i;
(for循环外)。或者如果你声明int i;
then,则不需要i
在 for 循环中声明。感谢@chux - 恢复莫妮卡,我在你的代码中更新了一个失败:
i < sizeof(arr) / sizeof(arr[0])
而是在函数的参数中使用size
。
推荐阅读
- python - 使用参考卷将 .nrrd 分段转换为 Nifti 卷
- elasticsearch - 如何创建动态弹性搜索查询......输入参数可能会改变
- php - 需要帮助将此 VB.NET 函数转换为 PHP
- java - 尝试注册后android应用程序出错
- azure - Azure 数据工厂:仅在新文件上触发存储事件
- python - 如何获得一维数组和二维数组的平均值?
- c++ - 运行时错误:将非零偏移量 18446744073709551615 应用于空指针 (basic_string.h)
- c - c 中的已退出分段错误(后缀的中缀)
- json - Gatling 转换 Json 响应
- regex - 正则表达式使用 xslt 匹配某些元素文本