一个简单的getch()和strcmp问题

时间:2010-09-24 04:43:55

标签: c++ c string getch

我有这个简单的问题,使用函数从用户获取输入,然后检查输入是否与“密码”相等。但是,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 个答案:

答案 0 :(得分:6)

  • 您的char数组password没有 有一个终止空字符。
  • 您需要确保不这样做 超过8个字符的东西 password
  • 同样c++应为ctr++

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

password[ctr] = 0;

答案 1 :(得分:2)

你在循环中递增c。你应该增加ctr。此外,所有其他人都说过的东西(空终结符,只有8个字符等)。

答案 2 :(得分:0)

getch()是在非标准标题<conio.h>中定义的函数。如果希望代码可移植,则不建议使用非标准功能。 :)

答案 3 :(得分:0)

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

password[ctr] = '\0';