изменить: для тех, кто ответил, прошу прощения, я должен был быть более ясным, задание ТРЕБУЕТ использовать цикл 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. Я пробовал разместить его снаружи, но это не возвращает меня к подсказке пользователя, но и не помещает его внутрь цикла, поэтому я, очевидно, делаю что-то не так.

2
bnr32jason 23 Фев 2015 в 11:12

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;
}
1
Sayse 23 Фев 2015 в 09:12
for ([(fist) Initialization];
     [(second)Condition];
     [(third or exit the loop) Progression])
     {
            [(fourth) Loop's body -if we reached third than we got here ]        
     }

Цикл for состоит из трех частей:

  1. Часть инициализации, которая происходит только один раз при запуске цикла.
  2. Часть оценки условий, которая выполняется для каждой итерации.
  3. Часть прогресса индексатора, которая также происходит для каждого цикла. Порядок следующий: Start Loop => init => CheckCondition => if OK Выполнить индексатор и выполнить тело цикла, иначе цикл будет выполнен.

Часть инициализации происходит только один раз, если вы хотите, чтобы она происходила при каждом взаимодействии, она должна быть внутри цикла или в условной части цикла.

Лучше всего использовать цикл while, если количество итераций впереди неизвестно, как в этом случае, когда оно определяется вводом пользователя.

0
Roman Ambinder 23 Фев 2015 в 08:38

Я бы переписал ваш код следующим образом. Создание метода для запроса ввода:

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;
}
0
Patrick Hofman 23 Фев 2015 в 08:21

Лучше сделать проверку перед входом в цикл. Попробуйте это .....

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));

         }
}
1
NIDHIN MATHEW 23 Фев 2015 в 08:39