2017-09-12 3 views
-5

私はいくつかのコードを持っています。ファイルの最初の行に格納されているもの以外のログインを入力すると、if文の両方の部分が実行されますが、最初の条件満たされる。両方の条件を実行しているステートメントの場合、最初の条件が満たされていれば2番目の条件を実行することはできませんが、C#

私はコードですべての問題を見つけることができないよう、およびログイン情報が正しければ、もちろん、それは彼らがログインできないというエラーを与えるにもかかわらず、利用者がログに記録されます。

コード:

System.IO.StreamReader file = new System.IO.StreamReader("UserData.txt"); 
string fileLine; 
string line; 
while ((line = file.ReadLine()) !=null) 
{ 
    fileLine = line; 
    System.Diagnostics.Debug.WriteLine(fileLine); 
    string len = fileLine.Length.ToString(); 
    string usr = fileLine.Substring(0, 20); 
    string hash = fileLine.Substring(20, 32); 
    if (usr.Contains(UserNameIpt.Text) && hash == password) 
    { 
     GlobalVar.UserNameEntered = UserNameIpt.Text; 
     showUserPanel(); 
     break; 
    } 
    else 
    { 
     MessageBox.Show("Error, password or username incorrect. \r\n\r\nyou may not have an account set up to use this software, please contact the system administartor for assistance.", "Login Error"); 
    } 
} 
+4

デバッガでこのコードを実行してみましたか?コードがwhileループと同じ繰り返しで 'if'と' else'を実行するとは思えません。 –

+3

問題は、ファイルの各行にエラーが発生することです。つまり、最後に到達するのではなく、100人のユーザーがリストされている場合は、100個のメッセージボックスが表示されます..... – BugFinder

+2

はい、これはwhile ifよりも。 – ThrowingSpoon

答えて

0

は私が

は(人生は短くする)あなたのファイルは、名前だけが含まれているふりをすることができます擬似コードであなたにあなたのコードを説明しましょう、それが

を持って言うことができます
  • だからあなたのコードは私の名前を与えると言い、私はピートに

  • あなたのコードを入力し、「エラー」ファイルを開き、JONを読み取って行く

  • は、ケイトは「エラー」になり読み込みます

  • は...アリソンは "エラー"

    を行く読み込み

ので

あなたはあなたのコードを変更する必要がわずか

  • は、「見つかった」と言うと、私はケイトにこの時間を選ぶ場合

  • falseに設定し、それを呼び出すフラグを選ぶ

  • 読み取りjon - 何もしない

  • ケイトを読み込む - セット発見し、[OK]を見つけた場合

  • を破る - 他には、私はピートを選んだ場合はfalseになりますた、ファイルの最後になるだろう

「エラー」と言うと、それは一度だけ "エラー"と言うでしょう

+0

ああ、そうかもしれない、私はそれを試み、それが動作するかどうかを確認する –

-1

私は実際には、isFound条件を使用するよりも、私は入れ子になった 'if'を使用して、エラーを表示した後、 while文が実行された後に表示されるエラーを追加しましたが、これはおそらく最も効率的な方法ではありませんが、これまでのところ動作しているようです。

  System.IO.StreamReader file = new System.IO.StreamReader("UserData.txt"); 
      string fileLine; 
      string line; 
      bool isFound = false; 
      while ((line = file.ReadLine()) !=null) 
      { 


       fileLine = line; 
       System.Diagnostics.Debug.WriteLine(fileLine); 
       string len = fileLine.Length.ToString(); 
       string usr = fileLine.Substring(0, 20); 
       string hash = fileLine.Substring(20, 32); 
       if (usr.Contains(UserNameIpt.Text)) 
       { 
        if (hash == password) 
        { 
         GlobalVar.UserNameEntered = UserNameIpt.Text; 
         showUserPanel(); 
         return; 
        } 
        else 
        { 
         MessageBox.Show("Error, password or username incorrect. \r\n\r\nyou may not have an account set up to use this software, please contact the system administartor for assistance.", "Login Error"); 
         return; 
        } 

       } 


      } 
      MessageBox.Show("Error, password or username incorrect. \r\n\r\nyou may not have an account set up to use this software, please contact the system administartor for assistance.", "Login Error");