2016-03-08 41 views
1

如何让程序状态为用户输入无效,然后在输入完成后关闭?我有第一个错误,指出用户输入的值是错误的,给他们另一次尝试,但如果用户键入相同/无效的数字,它会重复最后一件事。我怎么能限制到一个更多的尝试,然后如果用户没有提供有效的条目,它会正确和错误?代码如下:用户输入无效后程序结束

 string First; 
     string Last; 
     First = "Cristiano"; 
     Last = " Ronaldo"; 
     Console.Write("Please enter student name <First Last>: "); 
     Console.WriteLine(First + Last); 

     Console.WriteLine(" "); 

     Console.WriteLine("*************NOTE**********************************************"); 
     Console.WriteLine("*** Be sure to include decimal point for scores.   ***"); 
     Console.WriteLine("***  !!!All score should range from 0.00 to 100.00 !! ***"); 
     Console.WriteLine("***               ***"); 
     Console.WriteLine("*** For example : 80.50          ***"); 
     Console.WriteLine("***************************************************************"); 

     Console.WriteLine(" "); 

     double Exam_1 = -1; 
     double Exam_2; 
     double Exam_3; 
     double Assignment_1; 
     double Assignment_2; 

     Console.Write("Please enter score for Exam 1 <Example: 100.0>: "); 
     Exam_1 = Convert.ToDouble(Console.ReadLine()); 

     while (Exam_1 < 0.0 || Exam_1 > 100.0) 
     { 
      Console.Write("Exam score cannot be less than 0. or greater than 100.0. Please re-enter the score for Exam 1 <Example: 95.0>:"); 
      Exam_1 = Convert.ToDouble(Console.ReadLine()); 
     } 

     Console.Write("Please enter score for Exam 2 <Example: 0.0>: "); 
     Exam_2 = Convert.ToDouble(Console.ReadLine()); 

     while (Exam_2 < 0.0 || Exam_2 > 100.0) 
     { 
      Console.Write("Exam score cannot be less than 0.0 or greater than 100.0. Please re-enter the score for Exam 2 <Example: 95.0>:"); 
      Exam_2 = Convert.ToDouble(Console.ReadLine()); 
     } 

     Console.Write("Please enter score for Exam 3 <Example: 60.8>: "); 
     Exam_3 = Convert.ToDouble(Console.ReadLine()); 

     while (Exam_3 < 0.0 || Exam_3 > 100.0) 
     { 
      Console.Write("Exam score cannot be less than 0.0 or greater than 100.0. Please re-enter the score for Exam 3 <Example: 95.0>:"); 
      Exam_3 = Convert.ToDouble(Console.ReadLine()); 
     } 

     Console.WriteLine(" "); 

     Console.Write("Please enter score for Assignment 1 <Example: 100.0>: "); 
     Assignment_1 = Convert.ToDouble(Console.ReadLine()); 

     while (Assignment_1 < 0.0 || Exam_2 > 100.0) 
     { 
      Console.Write("Assignment score cannot be less than 0.0 or greater than 100.0. Please re-enter the score for Assignment 1 <Example: 95.0>:"); 
      Assignment_1 = Convert.ToDouble(Console.ReadLine()); 
     } 

     Console.Write("Please enter score for Assignment 2 <Example: 23.46>: "); 
     Assignment_2 = Convert.ToDouble(Console.ReadLine()); 

     while (Assignment_2 < 0.0 || Assignment_2 > 100.0) 
     { 
      Console.Write("Assignment score can not be less than 0.0 or greater than 100.0. Please re-enter the score for Assignment 2 <Example: 56.0>: "); 
      Assignment_2 = Convert.ToDouble(Console.ReadLine()); 
     } 

     Console.WriteLine(" "); 

     Console.WriteLine(" -------------- OUTPUT ---------------"); 

     Console.WriteLine(" "); 

     Console.Write("Student: "); 
     Console.WriteLine(First + Last); 

     Console.WriteLine(" "); 



















     Console.Write("Press any key to continue . . . "); 
     Console.ReadLine(); 
    } 
} 

}

回答

0

试试这个代码

static void Main(string[] args) 
    { 
     string First; 
     string Last; 
     First = "Cristiano"; 
     Last = " Ronaldo"; 
     Console.Write("Please enter student name <First Last>: "); 
     Console.WriteLine(First + Last); 

     Console.WriteLine(" "); 

     Console.WriteLine("*************NOTE**********************************************"); 
     Console.WriteLine("*** Be sure to include decimal point for scores.   ***"); 
     Console.WriteLine("***  !!!All score should range from 0.00 to 100.00 !! ***"); 
     Console.WriteLine("***               ***"); 
     Console.WriteLine("*** For example : 80.50          ***"); 
     Console.WriteLine("***************************************************************"); 

     Console.WriteLine(" "); 

     double Exam_1 = -1; 
     double Exam_2; 
     double Exam_3; 
     double Assignment_1; 
     double Assignment_2; 

     Console.Write("Please enter score for Exam 1 <Example: 100.0>: "); 
     Exam_1 = Convert.ToDouble(Console.ReadLine()); 
     var exitProgram = false; 
     var errorCount = 0; 

     while (Exam_1 < 0.0 || Exam_1 > 100.0) 
     { 
      Console.Write("Exam score cannot be less than 0. or greater than 100.0. Please re-enter the score for Exam 1 <Example: 95.0>:"); 
      Exam_1 = Convert.ToDouble(Console.ReadLine()); 
      ++errorCount; 
      ErrorCount(errorCount); 
     } 

     Console.Write("Please enter score for Exam 2 <Example: 0.0>: "); 
     Exam_2 = Convert.ToDouble(Console.ReadLine()); 
     errorCount = 0; 
     while (Exam_2 < 0.0 || Exam_2 > 100.0) 
     { 
      Console.Write("Exam score cannot be less than 0.0 or greater than 100.0. Please re-enter the score for Exam 2 <Example: 95.0>:"); 
      Exam_2 = Convert.ToDouble(Console.ReadLine()); 
      ++errorCount; 
      ErrorCount(errorCount); 
     } 

     Console.Write("Please enter score for Exam 3 <Example: 60.8>: "); 
     Exam_3 = Convert.ToDouble(Console.ReadLine()); 
     errorCount = 0; 
     while (Exam_3 < 0.0 || Exam_3 > 100.0) 
     { 
      Console.Write("Exam score cannot be less than 0.0 or greater than 100.0. Please re-enter the score for Exam 3 <Example: 95.0>:"); 
      Exam_3 = Convert.ToDouble(Console.ReadLine()); 
      ++errorCount; 
      ErrorCount(errorCount); 
     } 

     Console.WriteLine(" "); 

     Console.Write("Please enter score for Assignment 1 <Example: 100.0>: "); 
     Assignment_1 = Convert.ToDouble(Console.ReadLine()); 
     errorCount = 0; 
     while (Assignment_1 < 0.0 || Exam_2 > 100.0) 
     { 
      Console.Write("Assignment score cannot be less than 0.0 or greater than 100.0. Please re-enter the score for Assignment 1 <Example: 95.0>:"); 
      Assignment_1 = Convert.ToDouble(Console.ReadLine()); 
      ++errorCount; 
      ErrorCount(errorCount); 
     } 

     Console.Write("Please enter score for Assignment 2 <Example: 23.46>: "); 
     Assignment_2 = Convert.ToDouble(Console.ReadLine()); 
     errorCount = 0; 
     while (Assignment_2 < 0.0 || Assignment_2 > 100.0) 
     { 
      Console.Write("Assignment score can not be less than 0.0 or greater than 100.0. Please re-enter the score for Assignment 2 <Example: 56.0>: "); 
      Assignment_2 = Convert.ToDouble(Console.ReadLine()); 
      ++errorCount; 
      ErrorCount(errorCount); 
     } 

     Console.WriteLine(" "); 

     Console.WriteLine(" -------------- OUTPUT ---------------"); 

     Console.WriteLine(" "); 

     Console.Write("Student: "); 
     Console.WriteLine(First + Last); 

     Console.WriteLine(" "); 
     Console.Write("Press any key to continue . . . "); 
     Console.ReadLine(); 
    } 

    public static void ErrorCount(int errorCount) 
    { 
     if (errorCount > 0) 
     { 
      Console.Write("Error count too much ! . . . "); 
      Console.Write("Press any key to exit . . . "); 
      Console.ReadKey(); 
      Environment.Exit(0); 
     } 

    } 

请记住,如果用户输入一个字母数字号码或特殊字符,但你的想法不检测。

3

鉴于这是一个任务,我不知道,如果你的教授是像我这样的事情,我们只能用我们在课堂上所学到。也就是说,您可能想要查看double.tryparse https://msdn.microsoft.com/en-us/library/994c0zb1(v=vs.110).aspx

如果输入可以解析为double,则函数将返回bool,如果输入无效,则返回false。上面的MSDN代码示例应该给你一个很好的开始。

3

你显然是编程界的新手,这看起来像一个家庭作业问题。但是,我怀疑你突出显示的问题根源在于,如果调用Convert.ToDouble(Console.ReadLine())(其中输入无法转换),则会抛出异常并且不会捕获它。

你可以阅读更多有关异常的位置:https://msdn.microsoft.com/en-us/library/ms173160.aspx

要解决,我会实现这样的事情:

Console.Write("Please enter score for Exam 1 <Example: 100.0>: "); 
while(!Double.TryParse(Console.ReadLine(), out Exam_1)) 
{ 
     Console.Write("Try again..."); 
} 
2

看看你的代码的逻辑。 while循环会持续循环,直到表达式计算结果为false。如果您希望尽早终止循环,则需要通过更改条件表达式,使用不同类型的循环或使用break语句来修改循环。

Here is some reference material from Microsoft's website.

想通过你的问题,并问自己:你会怎样做,如果你是手动这样做呢?如果你在电脑的地方,你会采取什么逻辑步骤?你会做出什么样的决定,你需要哪些信息来做出这些决定?