2016-11-04 3 views
1

プログラムでユーザーのエントリをパスワード "prog"と照合して確認しようとしています。ユーザーは、正しいパスワードを取得する3つの試行があります。しかし、それはしばしば一致しませんが、 "正しいパスワード"の答えを与える。パスワード(文字)のユーザー入力をチェックするプログラムでは正しい結果が得られません。C#

if(p && r && o && g) valid = true; 

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
  
namespace ConsoleApplication10 
{ 
    class Program 
    { 
        static void Main(string[] args) 
        { 
            int tries = 0; 
            bool valid = false; 
            bool p, r, o, g; 
            char userInput; 
            int characters; 
  
            while (tries < 3 && valid == false) 
            { 
                Console.WriteLine("Please enter password:"); 
                p = r = o = g = false; 
                characters = 0; 
                while (characters < 4) 
                { 
                    userInput = Console.ReadKey().KeyChar; 
                    if (userInput == 'p' || userInput == 'P') p = true; 
                    else if (userInput == 'r' || userInput == 'R') r = true; 
                    else if (userInput == 'o' || userInput == 'O') o = true; 
                    else if (userInput == 'g' || userInput == 'G') g = true; 
                    characters++; 
                } 
  
                if (p == r == o == g == true) 
                { 
                    valid = true; 
                } 
                tries++; 
            } 
  
            if (valid == true) 
            { 
                Console.WriteLine("\nright password"); 
            } 
            else Console.WriteLine("\nwrong password"); 
            Console.ReadLine(); 
        } 
    } 
} 
+0

"しかし、よく一致しませんが、「正しいパスワード」という答えが得られます。 - 例を挙げることはできますか?コードから判断すると、 "p"、 "r"、 "o"、 "g"の組み合わせは、存在する場合にのみ、それらが来る順番をチェックしないために通過するように見えます。 – Quantic

+0

@ zom4あなたが単語progまたは文字だけを入力しようとしているのですか? –

+1

これは私が今まで見た最悪のパスワード検証コードです。 –

答えて

1

if (p == true && r == true && o == true && g == true) 
{ 
    valid = true; 
} 

またはあなたのブール値がtrueに設定されているあなたはこの真実を書き込む必要がないような何かを書くことができますので、にあなたのif文を変更

Idはプログラムを次のように変更します。

 var tries = 0; 

     while (tries < 3) 
     { 

      Console.Write("Please enter password: ");     
      var userInput = Console.ReadLine(); 
      if (userInput == "prog") 
      { 
       Console.WriteLine("\nright password"); 
       Console.ReadKey(); 
       break; 
      } 
       Console.WriteLine("\nwrong password, please press enter to try again"); 
       Console.ReadKey(); 
       Console.Clear(); 

       tries++;  
     } 
+0

私は同意しますが、私はおそらく一緒に行くでしょう:if(p && r && o && g){...} – phishfordead

+0

@phish良い点私は答えにそれを追加します –

+0

ありがとう、それは今働いた!タスクは、文字が同じであるということだけで "PRoG"または "ropr"を入力するように、文字でそれを行うことでしたので、 "prog"と比較することはできませんでした。しかし、このように、それは素晴らしい感謝を働かせます! – zom4

関連する問題