C程序阵列比较

时间:2017-12-12 03:07:39

标签: c

我们有两个数组A和B,每个都有10个整数。编写一个函数来测试数组A的每个元素是否等于数组B中的对应元素。换句话说,函数必须检查A[0]是否等于B[0]A[1]是等于B[1],等等。如果所有元素都相等,则函数返回true;如果至少有一个元素不相等,则返回false。

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

/* run this program using the console pauser or add 
   your own getch, system("pause") or input loop */

bool array(int ptr1[], int ptr2[]);

int main(int argc, char *argv[]) {

    int array1[] = {11, 33, 34, 25, 16, 2, 24, 57, 86, 66};
    int array2[] = {11, 33, 34, 25, 16, 2, 24, 57, 86, 66};

    int i;

    printf("Array A\t\tArray B\n");

    for(i = 0; i < 10; i++)
        printf("%d\t\t%d\n", array1[i], array2[i]);

    printf("\nResult of comparision: \n");

    bool result = array (array1, array2);

    if(result == 1)
        printf("false\n");
    else
        printf("false\n");
    getch();

    return 0;
}

我得到的错误是:

main.c(.text+0xfa): undefined 'array'
[Error]  Id returned 1 exit status
recipe for target '"Problem' failed

1 个答案:

答案 0 :(得分:1)

问题是您已声明了 array

bool array(int ptr1[], int ptr2[]);

但不是定义它。链接时,链接器会查找函数array的定义,但找不到它,提示错误:

main.c(.text+0xfa): undefined 'array'
[Error]  Id returned 1 exit status
recipe for target '"Problem' failed

要在声明的同一点定义该函数,您必须添加该函数的主体。在这种情况下,不需要前向声明。它已在main中使用之前声明,例如

int arraycmp (int ptr1[], int ptr2[], size_t size)
{
    return memcmp (ptr1, ptr2, size);
}

注意:无论您使用memcmp还是只是循环遍历每个元素并为每个元素执行单个比较,您必须将元素数量作为参数传递)

如果另一方面,在main()之后定义函数,则需要转发声明,以便该函数可用于main()

完全放弃,你可以做类似以下的事情:

#include <stdio.h>
#include <string.h>

/* run this program using the console pauser or add 
   your own getch, system("pause") or input loop */

int arraycmp (int ptr1[], int ptr2[], size_t size)
{
    return memcmp (ptr1, ptr2, size);
}

int main (void) {

    int array1[] = {11, 33, 34, 25, 16, 2, 24, 57, 86, 66},
        array2[] = {11, 33, 34, 25, 16, 2, 24, 57, 86, 66},
        i;

    printf("Array A\t\tArray B\n");

    for(i = 0; i < 10; i++)
        printf("  %d\t\t  %d\n", array1[i], array2[i]);

    printf("\nResult of comparision: %s\n", 
        arraycmp (array1, array2, sizeof array1) ? "false" : "true");

#if defined (_WIN32) || defined (_WIN64)
    getchar();
#endif

    return 0;
}

注意:如果你的数组有可能在元素数量上有所不同,你应该在调用arraycmp之前检查并按你的意愿处理错误。要么返回退出该点,要么传递较小的尺寸,只比较初始数量的元素)

示例使用/输出

$ ./bin/arrcmp
Array A         Array B
  11              11
  33              33
  34              34
  25              25
  16              16
  2               2
  24              24
  57              57
  86              86
  66              66

Result of comparision: true

57中将56更改为array2

$ ./bin/arrcmp
Array A         Array B
  11              11
  33              33
  34              34
  25              25
  16              16
  2               2
  24              24
  57              56
  86              86
  66              66

Result of comparision: false

仔细看看,如果您有其他问题,请告诉我。