我想尝试创建一个 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/