Если проблема оператора: игнорирование других операторов, даже если это правда (?) - PullRequest
0 голосов
/ 02 июля 2019

Даже если пользовательский ввод соответствует строковым операциям, оператор всегда приводит к 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 ]

4 голосов
/ 02 июля 2019

Вы можете попробовать loop : продолжайте спрашивать, когда 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!!!"); 
  }
3 голосов
/ 02 июля 2019

Блок 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;
}
1 голос
/ 02 июля 2019

Блок 'else' здесь относится только к последнему блоку 'if' (input == '/'), поэтому любые входные данные, отличные от '/', перейдут в этот блок 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

1 голос
/ 02 июля 2019

else в вашем случае - это else для условия if над ним. Поэтому всякий раз, когда ввод не "/", ваш else будет срабатывать.

Чтобы исправить это, вы можете изменить свое второе на 4-е, если на «иначе, если».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...