在条件C#下,do-while循环不会通过

我写了一个do-while循环,但是它不会以某种方式通过while条件。 当我输入无效字符时,它应该回到开头并按原样重复。 我在Visual Studio上逐步运行了代码,它显示代码甚至没有通过while条件。 (无论输入值是多少) 有人可以帮帮我吗? 提前非常感谢!

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


         } 
    }
}
lykccz 回答:在条件C#下,do-while循环不会通过

return inputCharacters;行使其退出循环。

我想你的意思是

} while (invalidCharacters != null);
return inputCharacters; 
,

问题是无论验证完成,您都将在循环末尾返回输入的字符串。

您可以使用布尔值来检查此有效性。

此外,您无需解析所有字符串,就可以中断第一个无效字符的内部循环。

我将字符串重命名为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;
}
,
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;
         } 
    }
}
本文链接:https://www.f2er.com/3134047.html

大家都在问