C在手动填充的数组中搜索值

时间:2016-09-02 11:49:52

标签: c arrays function console-application

我正在尝试编写一个程序,其中包含一个由用户填充的数组,并在其中找到由用户指定的值,然后打印,如果找到并在数组中计算该数字。但它仅适用于第一个元素array.My代码如下:

  `void searchh(int arr[],int search,int number,int counter);

int main()
{    
int number,search,i;
int counter=0;


printf("How many numbers will you enter?");
scanf("%d",&number);

int array[number];

for(i=0;i<number;i++){
    printf("Please enter the %d. element of the array:",i+1);
    scanf("%d",&array[i]);
}


printf("Please enter the number that you're looking for:");
scanf("%d",&search);

searchh(array,search,number,counter);


return 0;
}

void searchh(int arr[],int search,int number,int counter){
int i,c;
int key=search;
int num=number;
counter=0;

int arrsize=(int)(sizeof(arr)/sizeof(int));
int arrayent[(int)(sizeof(num)/sizeof(int))];


for(i=0;i<arrsize;i++)
{

if(arr[i]==key)
{
   arrayent[counter]=i;
   counter++;
}
}

printf("The number that you're looking for which is %d is found %d times.\nLocations:",key,counter);

if(counter>0){
for(c=0;c<sizeof(arrayent)/sizeof(int);c++){
    printf("%d\n",arrayent[c]);
}
}

else
    printf("Number doesn't exist!!");


}`

输出:

Output That Works Output That Doesn't Work

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

int arrsize=(int)(sizeof(arr)/sizeof(int));

这已经不符合你的想法了。 sizeof(arr) - 如果指针的大小是4个字节,则可以是4。换句话说,你无法像函数内部一样检查数组大小,arr衰减到数组第一个元素的指针。因此sizeof(arr)将返回指针的大小,可以是4或8.您需要将数组元素的数量作为参数传递给函数 - 在您的情况下为number

此:

int arrayent[(int)(sizeof(num)/sizeof(int))];

也很奇怪。 numintsizeof(num)sizeof(int)将是相同的 - 分区将为您提供1。

IMO这两行

int arrsize=(int)(sizeof(arr)/sizeof(int));
int arrayent[(int)(sizeof(num)/sizeof(int))];

应该像

一样
int arrsize = number;
int arrayent[number];

PS。还尝试使用调试器来帮助解决某些问题。