цикл do-while не проходит, пока выполняется условие C # - PullRequest
0 голосов
/ 09 ноября 2019

Я написал цикл do-while, но он как-то не проходит через условие условия. Когда я набираю недопустимые символы, он должен вернуться к началу и повторить, как и положено. Я запускал код шаг за шагом на Visual Studio, и он показывает, что код даже не проходит, пока условие. (неважно, что является входным значением) Может кто-нибудь, пожалуйста, помогите мне? Большое спасибо заранее!

using System;
using static System.Console;

namespace a5
{
    class Program
    {
        const string acceptedLetters = "EHLNTXZ";

        static void Main(string[] args)

        {
            GetUserString(acceptedLetters);
            ReadKey();
        }

        static string GetUserString(string letters)
        {
            string invalidCharacters;
            do
            {
                invalidCharacters = null;

                Write("Enter : ");

                string inputCharacters = ReadLine();

                foreach(char c in inputCharacters) 
                {
                    if(letters.IndexOf(char.ToUpper(c))==-1)
                    {
                        invalidCharacters = c.ToString();
                    }
                }

                if(invalidCharacters != null)
                {
                    WriteLine("Enter a valid input");
                }
                return inputCharacters;
            } while (invalidCharacters != null);


         } 
    }
}

Ответы [ 3 ]

0 голосов
/ 09 ноября 2019

Строка return inputCharacters; заставляет ее выйти из цикла.

Я думаю, вы имели в виду:

} while (invalidCharacters != null);
return inputCharacters; 
0 голосов
/ 09 ноября 2019

Проблема в том, что вы возвращаете введенную строку в конце цикла независимо от того, выполнена ли проверка.

Вы можете использовать логическое значение для проверки этой действительности.

Также вам не нужно анализировать всю строку, и вы можете разорвать внутренний цикл на первом недействительном символе.

Я переименовал строку в result, чтобы использовать стандартный шаблон и быть более чистым.

Например:

static string GetUserString(string letters)
{
  string result;
  bool isValid;
  do
  {
    Console.Write("Enter : ");
    result = Console.ReadLine();
    isValid = true;
    foreach ( char c in result )
      if ( letters.IndexOf(char.ToUpper(c)) == -1 )
      {
        isValid = false;
        Console.WriteLine("Enter a valid input");
        break;
      }
  }
  while ( !isValid );
  return result;
}
0 голосов
/ 09 ноября 2019
using System;
using static System.Console;

namespace a5
{
    class Program
    {
        const string acceptedLetters = "EHLNTXZ";

        static void Main(string[] args)

        {
            GetUserString(acceptedLetters);
            ReadKey();
        }

        static string GetUserString(string letters)
        {
            string invalidCharacters;
            do
            {
                invalidCharacters = null;

                Write("Enter : ");

                string inputCharacters = ReadLine();

                foreach(char c in inputCharacters) 
                {
                    if(letters.IndexOf(char.ToUpper(c))== -1)
                    {
                        invalidCharacters = c.ToString();
                    }
                }

                if(invalidCharacters != null)
                {
                    WriteLine("Enter a valid input");
                }

            } while (invalidCharacters != null);
            return inputCharacters;
         } 
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...