2017-03-26 4 views
0
void Manager::ManagerView1() 
{ 
    system("cls"); 
    string Ipass; 
    string Opass; 
    ifstream Password("Password.txt", ios::in); 
    if (!Password) 
    { 
     cerr << "Check File Integrity"; 
    } 
    else 
    { 
     while (!Password.eof()) 
     { 
      getline(Password,Ipass); 
      cout << "Enter Password :\n"; 
      cin >> Opass; 

      if (Opass == Ipass) 
      { 
       cout << "Passwords Match"; 
      } 
     } 
    } 
} 

テキスト値を入力しますcan`tすでにチェックされています。私は自分のコードを実行すると、 "PASSWORD.TXT" 内部

私はコードを実行するとパスワードを入力できますが、パスワードの一致は表示されません。そして、私はそれを入力することができないパスワードを再度尋ねる。そしてそれはただ終了する。

変更する必要はありますか?

+0

「Abhik Ray 1123」はパスワードですか、「Abhik Ray」はユーザー名ですか、「1123」はパスワードですか? –

+0

Abhik Ray 1123はパスワードです –

+0

'char []'の代わりに 'std :: string'を使用する必要があります。 –

答えて

0

OpassとIpassはポインタであり、Opass == Ipassを実行すると、メモリ内の同じ領域を指しているかどうかをチェックします。 strcmpを使用してその値を比較する必要があります。

+0

それは大丈夫ですが、主な問題は私がOpassに入ることもできないということです。 –

+0

cin >> Opassを試しましたか? – OrMiz

+0

私はしましたが、うまくいきませんでした –

2

パスワードファイルから一度に1行だけ一致させるなど、いくつかの問題があります。

メッセージの理由は、if (Opass == Ipass)がその内容ではなく文字配列のアドレスを比較するためです。

文字列を格納するのにstd::stringを使用した場合、比較は機能しますが、Cスタイルの文字列ではif(strcmp(Opass, Ipass) == 0)を使用する必要があります。

あなたはまた、ループを終了する方法については、この質問をチェックすることをお勧めします:cin >> Opass;>>とコードの新しいバージョンで

Why is iostream::eof inside a loop condition considered wrong?


は、一度に1つの単語を読み込みます(各スペースで停止します)。したがって、Abhik Ray 1123と入力すると、にはAbhikしか得られず、残りの行は次の読み取りまで入力バッファに残ります。

これはまた、次の入力を要求しないため、既に存在する次の単語を読み込むだけです。

入力行全体を読むには、テキストファイルから読み込むときと同じように、getline(cin, Opass);を使用する必要があります。

+0

私はOpassに入ることはできません。どうすればいいの? –

関連する問題