c - 如何让用户确定全局变量的数组大小?

标签 c arrays dynamic global

我想尝试创建一个 C 程序,让用户确定全局变量的数组大小(以使我的程序更加动态)。但有一个问题,因为您不能在范围之外使用 scanf。你们能帮我解决这个问题吗?

我尝试过在范围之外使用 scanf,但这是不可能的。

这是有效的代码(用户无法确定全局变量的数组大小):

#include <stdio.h>

int arr[100];
int tempArr[100];

void merge(int left, int middle, int right){
    int leftIndex, rightIndex, index;
    for(leftIndex = left, rightIndex = middle + 1, index = left;leftIndex<=middle && rightIndex<=right;index++){<br>
        if(arr[leftIndex]<arr[rightIndex]){
            tempArr[index] = arr[leftIndex++];
        }else{
            tempArr[index] = arr[rightIndex++];
        }
    }
    while(leftIndex<=middle){
        tempArr[index++]=arr[leftIndex++];
    }
    while(rightIndex<=right){
        tempArr[index++]=arr[rightIndex++];
    }
    for(int j = left; j<=right; j++){
        arr[j]=tempArr[j];
    }
}

void sort(int left, int right){
    int middle =0;
    if(left<right){
        middle=(left+right)/2;
        sort(left, middle);
        sort(middle+1, right);
        merge(left,middle,right);
    }
}

int binarySearch(int arr[], int left, int right, int search){
    int middle = 0;
    if(left<right){
        middle = (left+right)/2;
        if(arr[middle]==search){
            return middle;
        }else if(arr[middle]>search){
            return binarySearch(arr,left,middle,search);
        }else{
            return binarySearch(arr,middle+1,right,search);
        }
    }
    return -1;
}

int main(){
    int search;
    int index = 0;
    int arraySize = 0;
    scanf("%d", &arraySize); getchar();
    for(int i=0;i<arraySize; i++){
        int number;
        scanf("%d", &number); getchar();
        arr[index] = number;
        index++;
    }

    printf("Before sorting\n");
    int size=sizeof(arr)/sizeof(arr[0])-1;

    for(int i =0;i<=arraySize;i++){
        if(arr[i]!=0){
            printf("%d %d\n",arr[i],i);
        }
    }

    sort(0, arraySize-1);

    printf("\nAfter sorting\n");
    for(int i =0;i<=arraySize;i++){
        if(arr[i]!=0){
            printf("%d %d\n",arr[i],i);
        }
    }   

    printf("\nSearch a number: ");
    scanf("%d",&search);
    int result = 0;
    result = binarySearch(arr,0,arraySize,search);
    printf("Result: %d",result);
    return 0;
}

我尝试了下面的几行,但它们不起作用。我不确定是否还有其他方法可以想到。

#include <stdio.h>

int slot;
scanf("%d",&slot);
int arr[slot];
int tempArr[slot];

最佳答案

How to let user determine array size of global variables?

用户不能决定变量的大小,而是程序员决定。例如,设置一个静态的最大允许大小可能是非常有意义的,然后一个有效的用例可能是仅使用数组的一部分。

如果您需要在运行时设置数组的大小,可以使用 malloc 进行动态分配。研究动态分配。就是这样。

关于c - 如何让用户确定全局变量的数组大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57769516/

相关文章:

php - 将 json 数据输入智能建议插件

c - STM32 Bare Metal C - 无法让 LED 工作

c++ - 无法从 int[][] 转换为 int**?

c - 数组检查从 0 到 size-1 的所有整数

javascript - 如何根据其他列动态更改 Bootstrap 列宽度?

c# - 检查下拉列表是否已包含动态添加的项目

c++ - 如何检查 C++ 中变量的某些位?

c - execvp 在 c 中返回权限被拒绝的错误

c - 寻找最大的 gcd while 循环问题

PHP/MYSQL 使用 while 循环获取当前行,然后从第 1 列输出数据,然后继续对后续行执行相同操作