#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
totrue
.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. Да, добавил этот момент к моему ответу.