2016-11-04 9 views
1

Я пытаюсь проверить программу на запись пользователя в символах с помощью пароля «prog». У пользователя три попытки получить правильный пароль. Однако он часто дает ответ «правильный пароль», хотя он не соответствует.Программа для проверки ввода пользователем пароля (в символах) не дает правильных результатов, C#

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; 
} 

Или потому, что ваши логические значения устанавливаются правда, что вы можете написать что-то вроде этого нет никакой необходимости писать истинную:

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

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