2015-02-23 56 views
2

编辑:对于那些谁已经回答了,我道歉,我本来应该更清晰,分配需要根据我的教授循环使用的。在无效用户输入突围的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 (input >= MAXRANGE || input <= MINRANGE) 
{ 
    Console.WriteLine("That is not a valid value, please try again."); 
} 

也许休息一下;跟着它?但我不确定如何在for循环中使用它。我试过把它放在外面,但是这并没有让我回到用户提示符,但也没有把它放在循环内,所以我显然做错了。

+0

虽然在哪里?有关系吗?我把它放在最后,它给了我适当的信息“这不是一个有效的......”,但它并没有让我回到提示。我尝试添加休息;最后,同样的问题。 – bnr32jason 2015-02-23 08:15:25

+0

如果您要求用户重新输入值,并且想要将它们发送回过程的开始,那么可以在问题上使用一个while循环,直到它们写入,然后移至下一部分。 – 2015-02-23 08:17:05

+0

您可能希望将整个块放在while循环中,这样,当您跳出内部循环时,您将重新启动整个块。 – Jite 2015-02-23 08:17:40

回答

1

您可以使用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; 
} 
+0

for(;;)'可以是'while(true)'。你仍然不应该使用它,但它更直接阅读。 – 2015-02-23 08:24:39

+1

@PatrickHofman - 是的,上面留言评论说:“但教授专门说要在for循环中做这个部分”,我不同意这位教授:) – Sayse 2015-02-23 08:25:22

+1

我同意你的不同意见。 ;) – 2015-02-23 08:26:04

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. 状况评估的一部分。
  4. 索引器进程的一部分这也恰好为每一个循环。 的顺序如下: 开始循环=>的init =>校验条件=>如果OK进展索引并执行循环体,否则循环完成。

初始化部分只发生一次,如果您希望它发生在foreach中,它应该在循环内部或循环的条件部分。

最好的做法是在这种情况下,使用while循环时,迭代的次数是未知的未来一样,当它是由用户的输入来确定。

+0

我跟着你,但用户输入变量“input”是我初始化和循环条件的一部分。如果我在循环中放置提示,我将如何使用我的初始化和循环条件? – bnr32jason 2015-02-23 09:21:40

+0

您将初始化和级数部分留空并仅使用条件部分。 (; [code only here];) { } – 2015-02-24 04:13:22

+0

谢谢。我做了一点点改变,你帮助我走上正轨。我留下了初始化空白,并填写了其他两个。 – bnr32jason 2015-02-24 08:51:38

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

     } 
} 
+0

这是行不通的,因为输入总是小于'MINRANGE' – Sayse 2015-02-23 08:58:35

+0

啊,是的,这是真的。我试过这个代码,并想知道为什么它不处理我的数据输入,即使有一个有效的数字。 – bnr32jason 2015-02-23 09:02:09

+0

我不理解....你的有效输入如何总是小于MINRANGe? – 2015-02-23 09:31:12