在无效用户输入时中断for循环

时间:2015-02-23 08:12:52

标签: c# loops

编辑:对于那些已经回答的人,我道歉,我应该更清楚,分配要求我的教授使用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 个答案:

答案 0 :(得分:1)

您可以使用while循环

int input;
while(!int.TryParse(Console.ReadLine(), out input) || input >= MAXRANGE)
{
    Console.WriteLine("Not valid!");
}

请注意,这可能会让用户“卡住”#34;以及有关为什么它不有效的有用信息


如果由于某些奇怪的原因你必须使用for循环,你可以使用以下内容,但它是我永远不会宽恕的可怕代码

int input;
for(;;)
{
    if(int.TryParse(Console.ReadLine(), out input) && input < MAXRANGE)
        break;
}

答案 1 :(得分:1)

最好在进入循环之前进行验证。试试这个......

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

         }
}

答案 2 :(得分:0)

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 =&gt; init =&gt; CheckCondition =&gt; if OK推进索引器并执行循环体,否则循环完成。
  4. 初始化部分只发生一次,如果你希望它在foreach interation中发生,它应该在循环内或循环的条件部分中。

    最佳做法是在前面未知的迭代次数时使用while循环,就像在这种情况下,当用户的输入确定迭代次数时。

答案 3 :(得分:0)

我会按如下方式重写您的代码。创建一个询问输入的方法:

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