простая проблема getch () и strcmp - PullRequest
2 голосов
/ 24 сентября 2010

У меня есть эта простая проблема, когда пользователь получает данные, используя функцию, а затем проверяет, равен ли этот вход «паролю».Однако strcmp никогда не вернет желаемое значение, и виновник находится где-то в моем цикле, который использует getch (), чтобы взять каждый символ отдельно и добавить их в массив символов.Я выяснил это, заставив printf отобразить массив символов.Если я введу пароль, функция отобразит его как пароль ". Я понятия не имею, почему закрывающая двойная кавычка и пробел были включены в массив сразу после слова, которое я набрал. Любая идея? Вот код.Спасибо.

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

int validateUser();

int main()
{
   for(int x = 0;x<2;x++)
   { 
        if(validateUser())
         {   
             system("cls");
             printf("\n\n\t\t** Welcome **"); break; 
         }
        else                    
         {   
             system("cls");
             printf("\n\n\t\tIntruder Alert!");
             system("cls"); 
         }
   } 


    system("PAUSE>nul");
    return 0;
}

int validateUser()
{
    char password[9];
    char validate[] = "pass word";
    int ctr = 0, c;
    printf("Enter password : "); 
    do
    {
        c = getch();
        if(c == 32)
        {
             printf(" ");
             password[ctr] = c;
        }

        if(c != 13 && c != 8 && c != 32 )
        {
          printf("*");
          password[ctr] = c;
        }
        c++;    
    }while(c != 13);

    return (!strcmp(password, validate));
}

Ответы [ 4 ]

6 голосов
/ 24 сентября 2010
  • Ваш массив символов password не иметь завершающий нулевой символ.
  • Вы должны убедиться, что вы не заполнить более 8 символов в password
  • Также c++ должно быть ctr++

.

do {
 // stuff char into password.
 ctr++; 
}while(c != 13 && ctr <8);

password[ctr] = 0;
2 голосов
/ 24 сентября 2010

Вы увеличиваете c в вашем цикле. Вы должны увеличивать ctr. Кроме того, все, что сказали все остальные (нулевой терминатор, только 8 символов и т. Д.)

0 голосов
/ 02 мая 2018
do {
   // stuff char into password.
   ++ctr; 
   } while(c != 13 && ctr < 9);

password[ctr] = '\0';
0 голосов
/ 24 сентября 2010

getch() - это функция, определенная в нестандартном заголовке <conio.h>.Использование нестандартных функций не рекомендуется, если вы хотите, чтобы ваш код был переносимым.:)

...