【问题标题】:Input must be equal to one of 5 different string values输入必须等于 5 个不同的字符串值之一
【发布时间】:2019-04-01 15:29:45
【问题描述】:

用户输入必须等于 5 个不同字符串之一,否则用户必须再次输入,直到输入等于 5 个字符串之一。

我写了一些代码,如果第一次输入的输入等于 5 个字符串中的一个,它会按照应有的方式工作,如果不是,程序就会陷入无限循环。

novaDrzava.PrevladujocaVera = Console.ReadLine();

var vera = novaDrzava.PrevladujocaVera;
var prvacrkaVera = vera.Substring(0, 1);
var ostaloVera = vera.Substring(1, vera.Length - 1);

prvacrkaVera = prvacrkaVera.ToUpper();
ostaloVera = ostaloVera.ToLower();

vera = prvacrkaVera + ostaloVera;


while (true)
{
    if(vera == "Krščanstvo")
    {
        break;
    }

    if (vera == "Krscanstvo")
    {
        break;
    }

    if (vera == "Hinduizem")
    {
        break;
    }

    if (vera == "Islam")
    {
        break;
    }
    if (vera == "Budizem")
    {
        break;
    }

    Console.WriteLine("Vnesite ustrezno vero");


    vera = Console.ReadLine();
    vera = prvacrkaVera + ostaloVera;
}

【问题讨论】:

  • 好吧,你的 Console.ReadLine 在循环之外,所以它自然不会改变 - 这会导致无限循环。
  • @Quibblesome 是的,但是 get 会立即被覆盖到之前的值
  • 在vera = Console.Readline()之后,添加这4行:var prvacrkaVera = vera.Substring(0, 1); var ostaloVera = vera.Substring(1, vera.Length - 1); prvacrkaVera = prvacrkaVera.ToUpper(); ostaloVera = ostaloVera.ToLower();
  • 不要重复使用if 语句,而是查看stackoverflow.com/questions/14781857/… 并创建一个包含您可接受值的字符串集合,然后使用IEnumerable<string>.Contains 来确定它们是否合适。跨度>

标签: c#


【解决方案1】:

由于标识符不是英文的,我无法完全阅读您的代码。但是,鉴于您的其他问题,我认为这可能是您想要的:

var words = new List<string>
{
    "Krščanstvo",
    "Krscanstvo",
    "Hinduizem",
    "Islam",
    "Budizem"
};

while (true)
{
    var input = Console.ReadLine();

    if (words.Contains(input, StringComparer.InvariantCultureIgnoreCase))
        break;

    Console.WriteLine("Invalid selection. Please try again");
}

【讨论】:

  • 投反对票的人:请提供一个理由,以便我改进我的答案。
  • 不是我的反对意见,但我可以理解您还没有解决问题中的主要问题。为什么我们有一个无限循环?
  • @Steve 嗯?它不是无限的......当输入其中一个选项时,它会跳出循环。查看fiddle 以查看它是否按照 OP 的要求工作。
  • 选词不当。我的意思是你没有解释 OP 代码中的错误
  • @Steve 我几乎看不懂他的代码,因为它不是英文的,正如我在回答中提到的那样。但我确实按照“User input must be equal to one of 5 different strings, if not the user must input again, until the input is equal to one of the 5 strings.”的要求回答了他的问题。我的回答正是如此。
【解决方案2】:

您忘记在循环中重新分配prvacrkaVera 和ostaloVera 的值

while (true)
{
    if(vera == "Krščanstvo")
    {
        break;
    }

    if (vera == "Krscanstvo")
    {
        break;
    }

    if (vera == "Hinduizem")
    {
        break;
    }

    if (vera == "Islam")
    {
        break;
    }

    if (vera == "Budizem")
    {
            break;
    }

    Console.WriteLine("Vnesite ustrezno vero");
    vera = Console.ReadLine();

    prvacrkaVera = vera.Substring(0, 1);
    ostaloVera = vera.Substring(1, vera.Length - 1);

    prvacrkaVera = prvacrkaVera.ToUpper();
    ostaloVera = ostaloVera.ToLower();

    vera = prvacrkaVera + ostaloVera;
}

【讨论】:

    【解决方案3】:

    使用 switch 语句,以便您可以轻松检测何时输入了其他值

               while (true)
                {
                    switch(vera)
                    {
                        case "Krscanstvo" : 
                        break;
    
                        case "Krščanstvo" : 
                        break;
    
                        case "Hinduizem" : 
                        break;
    
                        case "Islam" : 
                        break;
    
                        case "Budizem" : 
                        break;
    
                        default :
                            break; //exit while loop
                        break;
                    }
                }
    

    【讨论】:

      猜你喜欢
      • 2021-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-22
      • 1970-01-01
      相关资源
      最近更新 更多