C 在手动填充的数组中搜索值
C Searching A Value In Manually Filled Array
我正在尝试编写一个程序,其中包含一个由用户填充的数组,并在其中找到一个由用户指定的值,然后如果它找到并打印 array.But 中的那个数字,它只工作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!!");
}`
和输出:
感谢您的帮助。
int arrsize=(int)(sizeof(arr)/sizeof(int));
这已经不是您认为的那样了。 sizeof(arr)
- 如果指针大小为 4 个字节,则可以为 4。换句话说,您不能像函数内部那样检查数组大小,arr
会衰减到数组第一个元素的指针。因此 sizeof(arr)
将 return 指针的大小,可以是 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。也尝试使用调试器来帮助您解决一些问题。
我正在尝试编写一个程序,其中包含一个由用户填充的数组,并在其中找到一个由用户指定的值,然后如果它找到并打印 array.But 中的那个数字,它只工作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!!");
}`
和输出:
感谢您的帮助。
int arrsize=(int)(sizeof(arr)/sizeof(int));
这已经不是您认为的那样了。 sizeof(arr)
- 如果指针大小为 4 个字节,则可以为 4。换句话说,您不能像函数内部那样检查数组大小,arr
会衰减到数组第一个元素的指针。因此 sizeof(arr)
将 return 指针的大小,可以是 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。也尝试使用调试器来帮助您解决一些问题。