2014-02-14 3 views
1

У нас есть проект, который имитирует функцию atm. пользователь должен ввести пинкод, и он будет замаскирован звездочкой. входной пинкод должен быть равен пинсону по умолчанию, который хранится в массиве. Моя программа может замаскировать входной пинкод звездочками, единственная проблема заключается в том, что даже если входной пинкод совпадает с пинсоном по умолчанию, он все равно выводится неверно. в чем проблема? вот мой код:Сравнение элементов массива в C++

void checkPword() 
{ 
    char defaultPin[4] = "1234"; 
    char inputPin[4] = ""; 

    clrscr(); 
    for (int cnt = 0; cnt <= 3; cnt++) 
    { 
     cout << "*"; 
     inputPin[ctr]; 
    } 
    if (defaultPin[0] == inputPin[0] && defaultPin[1] == inputPin[1] 
     && defaultPin[2] == inputPin[2] && defaultPin[3] == inputPin[3]) 
    { 
     clrscr(); 
     cout << "pincode is correct"; 
    } 
    else 
    { 
     clrscr(); 
     cout << "pincode is incorrect"; 
    } 
} 
+2

Символьная строка ' "1234"' фактически содержит * пять * символов. Вы не можете забыть о завершении '' \ 0''. Это означает, что вы пишете за пределами массива defaultPin. –

+2

Кроме того, что такое инструкция 'inputPin [ctr];' предполагается делать? –

+0

Вы пытались добавить точку останова, чтобы увидеть точную точку, где программа не делает то, что вы ожидаете? Искусство отладки полезно не только для этой программы, но и для будущих программ, которые вы пишете. –

ответ

1

Возможно, вам нужно назначить getch() на ctr?

ctr = getch(); 

Внутри для ..

PLUS: инструкция

inputPin[ctr]; 

не имеет эффектов!

Вы добавить:

inputPin[cnt] = putchar(ctr); 

SUGGESTION
просто сделать код ясно, заменить "ЦНТ" с "я".

РЕШЕНИЕ

char defaultPin[4]="1234"; 
char input[4] = ""; 
char currentChar; 
bool pinFail = false; 

for(int i=0; i != 3; i++) { 
    currentChar = getchar(); 
    input[i] = currentChar; 
    /* In this way you have only 3 if-control, not 3*4 as in your program */ 
    if(currentChar != defaultPin[i]) { 
    pinFail = true; 
    } 
} 

if(pinFail) { 
    /* do something (print error?) */ 
} else { 
    /* coutinue with your application */ 
} 
0
void checkPword() 
    { 
    char defaultPin[4]={1,2,3,4}; 
    char inputPin[4]=""; 

    clrscr(); 
    for(int cnt=0;cnt<=3;cnt++) 
     { 
      inputPin[cnt] = getch(); 
      cout<<"*"; 
     } 
     if ((defaultPin[0]==inputPin[0])&&(defaultPin[1]==inputPin[1])&&(defaultPin[2]==inputPin[2])&&(defaultPin[3]==inputPin[3])) 
      { 
      clrscr(); 
      cout<<"pincode is correct"; 
      } 
     else 
      { 
      clrscr(); 
      cout<<"pincode is incorrect"; 
      } 
    } 
Смежные вопросы