在数组中搜索数字 - C.

时间:2016-02-14 15:33:16

标签: c arrays pointers

好吧..我一直试图让这段代码工作,但由于某种原因它没有,我似乎无法找到问题。有人可以清除它吗?它应该运行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);
  }
}

2 个答案:

答案 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 );