2014-11-13 5 views
-6

Кто-нибудь знает, почему мой код печатает «Неверный PIN-код введен» после инструкции if вместо «Исправлен PIN-код»? Когда я изменяю заявление if на (input_pin != current_pin), он работает.Сравнение содержимого массивов в C

#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(); 
} 
+1

Пожалуйста, 1. Используйте заголовок, отражающий ваш вопрос, а не текущее отсутствие просветления. 2. Используйте правильное форматирование (для кода, но также и для текста - не используйте выделение жирным шрифтом). 3. Удалите весь пух (оправдания, благодарность, приветствия). 4. Поработайте над разъяснением вашего фактического вопроса. – Deduplicator

+0

попробуйте найти SO для «Compare C array». Я думаю, вы обнаружите, что пытаетесь проверить, имеют ли две переменные одну и ту же ссылку, а не сравнивают содержимое массивов. – DeanOC

+0

Вы сравниваете два расположения (указатели) массива, которые в этом случае всегда разные. Если вы измените свой оператор в if, это тоже не сработает, потому что будет принят неверный вывод. – eckes

ответ

1

if(input_pin == current_pin) сравнивает два целых массива. В C массивы представлены внутри как указатели. Это как если бы вы сравнивали две переменные int *. Потому что input_pin и current_pin на самом деле разные массивы, два указателя никогда не будут сравниваться как равные.

Чтобы выполнить сравнение, которое вы пытаетесь сделать, вам нужно будет сравнить каждый элемент каждого PIN-кода отдельно.

+0

ура, это сделало мою ошибку более ясной. –

Смежные вопросы