2

関数を使用してユーザーから入力を取得し、入力が「パスワード」と「等しい」かどうかを確認するこの単純な問題があります。ただし、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

4 に答える 4

6
  • char 配列passwordには、終端の null char がありません。
  • 8文字を超えないようにする必要があります password
  • またc++、する必要がありますctr++

.

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

password[ctr] = 0;
于 2010-09-24T04:46:06.033 に答える
2

ループ内で c をインクリメントしています。ctrをインクリメントする必要があります。また、他の人が言ったことすべて (ヌルターミネーター、8 文字のみなど)。

于 2010-09-24T04:49:37.943 に答える
0

getch()非標準ヘッダーで定義された関数<conio.h>です。コードを移植可能にしたい場合、非標準機能に依存することはお勧めできません。:)

于 2010-09-24T04:45:08.097 に答える