изменить: для тех, кто ответил, прошу прощения, я должен был быть более ясным, задание ТРЕБУЕТ использовать цикл for для моего профессора.
Я делаю небольшое задание для класса, и у меня проблемы с выходом из цикла for и с предложением пользователю ввести допустимое значение. Мой код настроен так:
const int MINRANGE = 1;
const int MAXRANGE = 20;
int input = 0;
Console.Write("Enter the desired maximum: ");
string strInput = Console.ReadLine();
Console.WriteLine("\n\n\n");
for (int.TryParse(strInput, out input); input >= MINRANGE && input <= MAXRANGE; input--)
{
Console.WriteLine("{0,2} {1,5}", input, Math.Pow(input, 3));
}
Программа правильно отображает все, что мне нужно. Когда пользователь вводит значение вне указанного мной диапазона, мне нужно дать ему короткое сообщение, а затем выйти из цикла и вернуться к начальному запросу. Я думаю, мне нужно использовать что-то вроде следующего оператора if:
if (input >= MAXRANGE || input <= MINRANGE)
{
Console.WriteLine("That is not a valid value, please try again.");
}
Возможно с перерывом; после этого? Но я не уверен, как использовать его внутри цикла for. Я пробовал разместить его снаружи, но это не возвращает меня к подсказке пользователя, но и не помещает его внутрь цикла, поэтому я, очевидно, делаю что-то не так.
4 ответа
Вы можете использовать цикл while
int input;
while(!int.TryParse(Console.ReadLine(), out input) || input >= MAXRANGE)
{
Console.WriteLine("Not valid!");
}
Обратите внимание, что это может привести к "застреванию" пользователя, и было бы неплохо получить полезное сообщение о том, почему это недействительно.
Если по какой-то странной причине вы должны использовать цикл for, вы можете использовать следующий, но это ужасный код, который я бы никогда не потворствовал
int input;
for(;;)
{
if(int.TryParse(Console.ReadLine(), out input) && input < MAXRANGE)
break;
}
for ([(fist) Initialization];
[(second)Condition];
[(third or exit the loop) Progression])
{
[(fourth) Loop's body -if we reached third than we got here ]
}
Цикл for состоит из трех частей:
- Часть инициализации, которая происходит только один раз при запуске цикла.
- Часть оценки условий, которая выполняется для каждой итерации.
- Часть прогресса индексатора, которая также происходит для каждого цикла. Порядок следующий: Start Loop => init => CheckCondition => if OK Выполнить индексатор и выполнить тело цикла, иначе цикл будет выполнен.
Часть инициализации происходит только один раз, если вы хотите, чтобы она происходила при каждом взаимодействии, она должна быть внутри цикла или в условной части цикла.
Лучше всего использовать цикл while, если количество итераций впереди неизвестно, как в этом случае, когда оно определяется вводом пользователя.
Я бы переписал ваш код следующим образом. Создание метода для запроса ввода:
const int MINRANGE = 1;
const int MAXRANGE = 20;
int input = 0;
string strInput = AskInput();
while (!int.TryParse(strInput, out input)) /*while the number is invalid*/
{
Console.WriteLine("Your input is invalid. Try again.");
strInput = AskInput();
}
while (input >= MINRANGE && input <= MAXRANGE)
{
Console.WriteLine("{0,2} {1,3}", input, Math.Pow(input, 3));
input--;
}
Где AskInput
:
private static string AskInput()
{
Console.Write("Enter the desired maximum: ");
string strInput = Console.ReadLine();
Console.WriteLine("\n\n\n");
return strInput;
}
Лучше сделать проверку перед входом в цикл. Попробуйте это .....
const int MINRANGE = 1;
const int MAXRANGE = 20;
int input = 0;
Console.Write("Enter the desired maximum: ");
string strInput = Console.ReadLine();
Console.WriteLine("\n\n\n");
if (input > MAXRANGE || input < MINRANGE)
{
Console.WriteLine("That is not a valid value, please try again.");
}
else
{
for (int.TryParse(strInput, out input); input >= MINRANGE && input <=
MAXRANGE; input--)
{
Console.WriteLine("{0,2} {1,3}", input, Math.Pow(input, 3));
}
}
Похожие вопросы
Новые вопросы
c#
C # (произносится как «резкий») - это высокоуровневый, статически типизированный язык программирования с несколькими парадигмами, разработанный Microsoft. Код C # обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, включая, среди прочего, .NET Framework, .NET Core и Xamarin. Используйте этот тег для вопросов о коде, написанном на C # или в формальной спецификации C #.