c # — программа не завершается

#c# #exit

#c# #выход

Вопрос:

только что начал использовать C #, и это может быть просто простым решением, но, похоже, я его не вижу. Как только программа выполняется в первый раз (после добавления двух чисел), пользователю предлагается ввести да или нет в качестве условия выхода. Когда я набираю «нет», программа снова переходит в цикл.

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace BasicCalculator
{
    class Program
    {
        static void Main(string[] args)
        {
            bool again = false;
            while (!again)
            {
                Console.WriteLine("C# Basic Calcuator");
                Console.WriteLine("Please enter two numbers to be added: ");
                Console.WriteLine("Number 1: ");

                int resu<
                int a = Convert.ToInt32(Console.ReadLine());


                Console.WriteLine("Number 2: ");
                int b = Convert.ToInt32(Console.ReadLine());

                Console.WriteLine("Result: ");
                result = a   b;

                //print result
                Console.WriteLine(result);

                //potential exit condition
                Console.WriteLine("Would you like to calculate again?");
                if(Console.ReadLine() == "no")
                {
                    again = false;
                }
                else
                {
                    again = true;
                }

            }



        }
    }
}
 

Любая помощь приветствуется!

Комментарии:

1. Вы пытались изменить условие (no==true)?

2. подсказка: что произойдет, если вы введете «да» вместо «нет»?

3. Не ответ, но если вы хотите, чтобы цикл выполнялся хотя бы один раз, вы должны изменить его на цикл Do..While .

4. Используйте tolower() и trim() и поставьте точки останова, чтобы снова отладить значение и посмотреть, в чем проблема

5. Вы также можете узнать о ключевом слове break .

Ответ №1:

Измените верхние 2 строки на следующие:

 bool again = true;
while (again)
 

Ответ №2:

изменить

 while (!again)
 

с

 while (again)
 

когда пользователь вводит no, again устанавливается значение false; поэтому в while цикле снова отрицается, что приводит к продолжению цикла while.

кстати, вам нужно изменить

 bool again = false;
 

Для

 bool again = true;
 

Комментарии:

1. Тогда цикл вообще не будет выполняться: p

2. Внесение этого изменения не позволяет программе начать выполнение.

3. @xtheking: Нет, начинается выполнение программы, просто тело цикла не выполняется. Но да, просто установите начальное значение again to true .

4. Это идеальный повод использовать do...while вместо while .

5. @MattBurland это сделало это!

Ответ №3:

Вы можете добиться того, чего хотите, с помощью использования While с внесением незначительных изменений, как предлагают здесь разные люди, но вы даже можете использовать do while вместо while, который будет запускаться в цикле в первый раз, а затем будет проверять условие каждый раз:-

Как говорит MSDN :-

Оператор do выполняет оператор или блок операторов повторно, пока указанное выражение не примет значение false . Тело цикла должно быть заключено в фигурные скобки, {}, если оно не состоит из одного оператора. В этом случае фигурные скобки необязательны.

 bool again = false;
               do {
                Console.WriteLine("C# Basic Calcuator");
                Console.WriteLine("Please enter two numbers to be added: ");
                Console.WriteLine("Number 1: ");

                int resu<
                int a = Convert.ToInt32(Console.ReadLine());


                Console.WriteLine("Number 2: ");
                int b = Convert.ToInt32(Console.ReadLine());

                Console.WriteLine("Result: ");
                result = a   b;

                //print result
                Console.WriteLine(result);

                //potential exit condition
                Console.WriteLine("Would you like to calculate again?");
                if(Console.ReadLine() == "no")
                {
                    again = false;
                }
                else
                {
                    again = true;
                }

            }  while (again);
 

Комментарии:

1. У вас все та же проблема, что и в исходном коде. !false == true

2. извините, это была опечатка @GrantWinney

3. Кроме того, использование Do...While , возможно, лучшего стиля для этого конкретного цикла, но в этом нет необходимости. Исходный цикл работает просто отлично, если они устраняют проблему с условием.

4. да, согласен @MattBurland Я только что дал один вариант, потому что остальные ответы уже были даны

Ответ №4:

Вы могли бы написать

 again = (Console.ReadLine() == "no" ? true : false);
 

Но ваш выбор именования переменных действительно неоднозначен, лучшим именем может быть

 bool stopLoop = false;
while (!stopLoop)
{
    .....
    stopLoop = (Console.ReadLine() == "no" ? true : false);
}
 

Как указано в комментарии ниже, вы не должны пытаться преобразовать в целое число то, что вводит ваш пользователь, без лучшей проверки на наличие ошибок. С помощью Convert.ToInt32 для нечислового значения выдает исключение. Лучший код мог бы быть

   int resu<
  if(!Int32.TryParse(Console.ReadLine(), out result))
  {
       Console.WriteLine("Please enter a valid number");
       continue;
  }
 

Комментарии:

1. Может быть, включите в свой ответ исключения, которые он будет генерировать, если для любого из чисел будет добавлено «да»?

Ответ №5:

Активируются случайные возможности программирования!

 if(Console.ReadLine() == "no")
    again = true;
else
    again = false;
 

А также вы можете захотеть изменить имя переменной на что-то вроде stop_flag , чтобы это имело смысл.

Комментарии:

1. снова = консоль. ReadLine() == «нет»; <- сэкономить несколько строк

2. Да, добавил этот момент к моему ответу.