【发布时间】:2019-09-03 10:10:01
【问题描述】:
我想尝试创建一个 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];
【问题讨论】:
-
一句话送给你:
malloc. -
我对如何实现
malloc有了一些了解。也许,快速教程会有所帮助。感谢您的快速回复。 -
@JL2210 我猜他的意思是“如何使用
malloc”。 Elmer:有无数关于如何做到这一点的教程(到目前为止,这里有几个回答你的问题)。我会尝试在网络上搜索“C malloc 动态数组”或类似的东西。 -
如果重点是创建一个灵活、可重用的库,那么您是否考虑过全局变量对于此类目的的问题?
-
@JohnBollinger 一步一步,我会说。在担心全局变量之前,我会担心要求用户显式地预先指定一些程序可以说应该自己找出的东西,真正动态地。