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