好吧..我一直试图让这段代码工作,但由于某种原因它没有,我似乎无法找到问题。有人可以清除它吗?它应该运行5个数字,然后你应该输入一个你想知道数组中是否存在的数字。它只是说不。
void search_for_number(int *a, int search);
int main(void)
{
int number[5];
int i, search, a = 1;
for(i = 0; i < 5; i++)
{
printf("Number %d of 5: \n", a++);
scanf("%d", &number[i]);
}
printf("\nWhat number should we search for?: \n");
scanf("%d", &search);
search_for_number(&number[i], search);
}
void search_for_number(int *a, int search)
{
int i;
for(i = 0; i < 5; i++)
{
if(*a == search)
{
printf("%d is present!\n", search);
}
}
if(*a != search)
{
printf("%d is not present.\n", search);
}
}
答案 0 :(得分:1)
要将数组发送到函数,您需要发送数组的基址并使用指针接收它。
search_for_number(&number[i], search);
在此行i = 5
,因为您在for
循环后没有重置它。
在调用函数之前重置它,或者只需执行
search_for_number(number, search);
由于数组的名称是基址本身。
另一个问题是你在函数中访问数组的方式。
在函数search_for_number()
中,a
现在指向数组的第一个整数,您可以通过执行a[i]
来访问它们,这基本上意味着*(a + i)
。因此,在更改后应该看起来像,
for(i = 0; i < 5; i++)
{
if(a[i] == search) // or if(*(a + i) == search)
{
printf("%d is present!\n", search);
}
}
在其他地方也相应地进行更改。
而且,既然你想在找到一个元素后结束函数执行,你需要在函数找到之后使函数返回,
for(i = 0; i < 5; i++)
{
if(a[i] == search) // or if(*(a + i) == search)
{
printf("%d is present!\n", search);
return;
}
}
<小时/> 顺便说一句,因为你在第一个循环中添加了
return;
语句,所以不需要进行下一次检查。因此,您的总功能应该类似于
void search_for_number(int *a, int search)
{
int i;
for(i = 0; i < 5; i++)
{
if(a[i] == search) // or if(*(a + i) == search)
{
printf("%d is present!\n", search);
return;
}
}
printf("%d is not present.\n", search);
}
您的main()
有返回值,请添加
return 0;
在main()
的末尾。它可以省略,但它是一个很好的编码实践。请参阅this。
答案 1 :(得分:1)
调用函数search_for_number
向它传递数组索引为5的不存在元素的地址
search_for_number(&number[i], search);
^^^^^^^^^^
所以这个电话没有意义。
这个陈述在函数search_for_number
if(*a == search)
或本声明
if(*a != search)
始终将数组的第一个元素与值search
进行比较。
此功能还取决于幻数5。:)
该功能可以按以下方式编写
void search_for_number( const int *a, int n, int search )
{
int i = 0;
while ( i < n && a[i] != search ) i++;
if ( i != n )
{
printf( "%d is present!\n", search );
}
else
{
printf( "%d is not present.\n", search );
}
}
并调用
search_for_number( number, 5, search );
这是一个示范程序
#include <stdio.h>
void search_for_number( const int *a, int n, int search )
{
int i = 0;
while ( i < n && a[i] != search ) i++;
if ( i != n )
{
printf( "%d is present!\n", search );
}
else
{
printf( "%d is not present.\n", search );
}
}
#define N 5
int main( void )
{
int a[N] = { 1, 2, 3, 4, 5 };
for ( int i = 0; i <= N + 1; i++ ) search_for_number( a, N, i );
}
它的输出是
0 is not present.
1 is present!
2 is present!
3 is present!
4 is present!
5 is present!
6 is not present.
当然,第二个参数的类型size_t
而不是int
会更好。:)例如
void search_for_number( const int *a, size_t n, int search );