比较C中数组的内容

时间:2014-11-13 00:13:50

标签: c arrays

有谁知道为什么我的代码正在打印"输入错误的PIN码" 在if语句之后,而不是"输入正确的PIN"?当我将if语句更改为(input_pin != current_pin)时,它可以正常工作。

#include <stdio.h> 
#define PIN_SIZE 4

main()
{
   int input_pin[PIN_SIZE];
   int current_pin[PIN_SIZE] = {1,2,3,4};
   int i;

   for(i = 0; i < PIN_SIZE; i++)
   {
       printf("Enter PIN %d: ", i+1);
       scanf("%d", &input_pin[i]);
   }

   if(input_pin == current_pin)
   {
       printf("\nCorrect PIN entered.\n");
   }

   else
   {
       printf("\nIncorrect PIN entered!\n");
   }

   flushall();
   getchar();
}

2 个答案:

答案 0 :(得分:1)

if(input_pin == current_pin)正在比较两个整数数组。在C中,数组在内部表示为指针。它就像你在比较两个int *变量一样。因为input_pincurrent_pin实际上是不同的数组,所以两个指针永远不会相等。

要完成您尝试进行的比较,您需要单独比较每个PIN的每个元素。

答案 1 :(得分:1)

在这种情况下,您不必使用数组

#include <stdio.h>

int main()
{

    int input_pin = 0;
    int current_pin = 1234;

    printf("Enter PIN: ");
    if ( ( scanf("%d", &input_pin)) == 1) { // successful scanf == 1. one item read

        if(input_pin == current_pin)
        {
            printf("\nCorrect PIN entered.\n");
        }
        else
        {
            printf("\nIncorrect PIN entered!\n");
        }
        getchar();
    }
}

编辑:
使用char数组会更容易,因为strcmp会比较所有元素。如果所有元素都匹配,strcmp将返回0. char数组必须是&#39; \ 0&#39;终止。

#include<stdio.h>
#include<string.h>
#define PIN_SIZE 4

int main()
{
    int i = 0;
    char input_pin[PIN_SIZE+1] = {0}; // PINSIZE+1 to allow for terminating '\0'. set all elements five elements to 0
    char current_pin[PIN_SIZE+1] = {"1234"};

    for( i = 0; i < PIN_SIZE; i++)
    {
        printf("Enter PIN %d: ", i+1);
        scanf(" %c", &input_pin[i]); // skip whitespace scan one character

    }

    if(strcmp( input_pin,current_pin) == 0) // if all elements match == 0
    {
        printf("\nCorrect PIN entered.\n");
    }
    else
    {
        printf("\nIncorrect PIN entered!\n");
    }
    getchar();
    return 0;
}

可以使用int数组,但需要一个标志来检查每个元素

#include<stdio.h>
#include<string.h>
#define PIN_SIZE 4

int main()
{
    int i = 0;
    int isMatch = 1; // flag to check matching elements
    int input_pin[PIN_SIZE] = {0}; // set all elements to 0
    int current_pin[PIN_SIZE] = {1,2,3,4};

    for( i = 0; i < PIN_SIZE; i++)
    {
        printf("Enter PIN %d: ", i+1);
        scanf("%d", &input_pin[i]);

        if( input_pin[i] != current_pin[i]) // check each element
        {
            isMatch = 0; // if an element does not match, reset to 0
        }
    }

    if( isMatch == 1) // isMatch did not get reset to 0
    {
        printf("\nCorrect PIN entered.\n");
    }
    else
    {
        printf("\nIncorrect PIN entered!\n");
    }
    getchar();
    return 0;
}