Вопрос

У меня есть эта простая проблема, которая получает вход от пользователя, используя функцию, затем проверяет, будет ли вход «равный» к «паролю». Тем не менее, 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));
}
Это было полезно?

Решение

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

.

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

password[ctr] = 0;

Другие советы

Вы увеличиваете C в вашей петле. Вы должны быть увеличения CTR. Кроме того, все вещи, которые все остальные сказали (нулевой терминатор, только 8 символов и т. Д.).

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

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

password[ctr] = '\0';
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top