首页 > 解决方案 > 创建一个随机数组并检查用户输入是否在其中

问题描述

我是 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!");
        }
}

标签: carrays

解决方案


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


推荐阅读