繁体   English   中英

do-while 循环不会 go 通过 while 条件 C#

[英]do-while loop does not go through while condition C#

我写了一个 do-while 循环,但它并没有以某种方式运行 while 条件。 当我输入无效字符时,它应该 go 回到开头并按预期重复。 我在 Visual Studio 上逐步运行代码,它显示代码甚至没有 go 通过 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);


         } 
    }
}

该行return inputCharacters; 使它离开循环。

我想你的意思是:

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

问题是无论验证是否完成,您都会在循环结束时返回输入的字符串。

您可以使用 boolean 来检查此有效性。

此外,您不需要解析所有字符串,您可以在第一个无效字符上打破内部循环。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM