有谁知道为什么我的代码正在打印"输入错误的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();
}
答案 0 :(得分:1)
if(input_pin == current_pin)
正在比较两个整数数组。在C中,数组在内部表示为指针。它就像你在比较两个int *
变量一样。因为input_pin
和current_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;
}