如果语句问题:即使其他语句为true(?),也要忽略

时间:2019-07-02 10:00:22

标签: c# if-statement

即使用户输入的匹配字符串操作,语句总是仍会生成false,而该词又会显示错误提示。

请原谅我的代码,如果它看起来平庸,我刚开始学习编程不少于一周。我认为我的问题太具体了,这就是为什么我很难找到解决方案的原因。任何都会感激的。

Console.Write("What Operation?: ");

string input = Console.ReadLine();

if (input == "+")
{
   op = input;
}
if (input == "-")
{
   op = input;
}
if (input == "*")
{
   op = input;
}
if (input == "/")
{
   op = input;
}
else
{
   op = "Enter a valid operation!!!";
   Console.WriteLine(op);
   Console.ReadLine();
}

如果用户编写了正确的操作:应将其存储到“ op”,然后将其用于方程式。

4 个答案:

答案 0 :(得分:4)

您可以尝试循环:不断询问input不在validInputs内的时间:

  // Let's organize all valid input as a collection for better
  // readability and better maintenance
  HashSet<string> validInputs = new HashSet<string>() {
    "+", "-", "*", "/",
  };

  // Keep asking...
  while (true) {
    // $"...{string.Join(...)}..." let's be nice and let user know 
    // which operations are supported: "+, -, *, /"
    Console.Write($"What Operation? ({string.Join(", ", validInputs)}): "); 

    // Trim() - let's be nice and tolerate leading / trailing spaces
    string input = Console.ReadLine().Trim(); 

    // ... until user provides a valid input (i.e. which is in validInputs)
    if (validInputs.Contains(input)) {        
      op = input;

      break;
    }

    Console.WriteLine("Enter a valid operation!!!"); 
  }

答案 1 :(得分:3)

else块与上一个if语句相关,因此您具有:

if (input == "/")
{
    op = input;
}
else
{
    op = "Enter a valid operation!!!";
    Console.WriteLine(op);
    Console.ReadLine();
}

这将意味着else块将在每次输入不等于"/"时执行。

可以使用if语句来代替使用大量的switch语句:

Console.Write("What Operation?: ");
string input = Console.ReadLine();
string op;
switch (input)
{  
    case "+":
        op = input;
        break;
    case "-":
        op = input;
        break;
    case "*":
        op = input;
        break;
    case "/":
        op = input;
        break;
    default:
        op = "Enter a valid operation!!!";
        Console.WriteLine(op);
        Console.ReadLine();
        break;
}

答案 2 :(得分:1)

您的情况下的else为上面的if条件的else。因此,只要输入不是“ /”,其他输入就会触发。

要解决此问题,可以将“ if if”(第二个)更改为“ else if”(第四个)。

答案 3 :(得分:1)

此处的'else'块仅与最后一个'if'块(输入=='/')有关,因此任何非'/'的输入都将进入该else块。

我相信您想做的是 所有其他检查均失败时执行上一次检查。为此,您需要一个“ else if”:

    if (input == "+")
    {
        op = input;
    } else if (input == "-")
    {
        op = input;
    } else if (input == "*")
    {
        op = input;
    } else if (input == "/")
    {
        op = input;
    }
    else
    {
        op = "Enter a valid operation!!!";
        Console.WriteLine(op);
        Console.ReadLine();
    }

不过,更好的方法(更具可读性)是使用switch