我正在尝试编写一个程序,其中包含一个由用户填充的数组,并在其中找到由用户指定的值,然后打印,如果找到并在数组中计算该数字。但它仅适用于第一个元素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!!");
}`
输出:
感谢您的帮助。
答案 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))];
也很奇怪。 num
是int
。 sizeof(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。还尝试使用调试器来帮助解决某些问题。