2017-06-04 53 views
0

我刚刚开始在C#中,我做了这个非常简单的计算器。首先,你对我的代码有什么看法,有什么我应该改进的地方?其次,当我要求用户输入2个数字时,我怎样才能让他只能输入数字?如果用户键入不同的字符,循环会卡住并且程序崩溃。如何只允许用户输入数字

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Threading; 

namespace App1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      bool retry = true; 
      while (retry) 
      { 
       retry = true; 
       double x1; 
       double x2; 
       double x3; 
       string calc; 
       Console.WriteLine("**** Hello, Welcome to Calculator ****"); 
       Console.WriteLine("Type a number please: "); 

       x1 = Convert.ToDouble(Console.ReadLine()); 
       Console.WriteLine("\n Now type another number: "); 
       x2 = Convert.ToDouble(Console.ReadLine()); 

       Console.WriteLine("\n Now please select a calculation:(/,*,+/-)"); 
       calc = Convert.ToString(Console.ReadLine()); 
       if (calc == "*") 
       { 
        x3 = (x1 * x2); 
        Console.WriteLine("\n Your Numbers equal = " + x3); 
        retry = false; 
       } 
       else if (calc == "/") 
       { 
        x3 = (x1/x2); Console.WriteLine("\n Your Numbers equal = " + x3); 
        retry = false; 
       } 
       else if (calc == "+") 
       { 
        x3 = (x1 + x2); 
        Console.WriteLine("\n Your Numbers equal = " + x3); 
        retry = false; 
       } 
       else if (calc == "-") 
       { 
        x3 = (x1 - x2); 
        Console.WriteLine("\n Your Numbers equal = " + x3); 
        retry = false; 
       } 
       else 
       { 
        Console.WriteLine("\n Error, please type one of the 4 calculations: "); 
        retry = true; 
       } 

       //Don't Exit: 
       Console.ReadKey(); 
       //Don't Exit: 
      } 
     } 
    } 
} 

回答

1

您可以使用Double.TryParse来确保用户的输入是有效的双精度型。如果接收到无效输入,此方法的优点是不会引发异常。

用法是这样的:

double x1; 
Console.WriteLine("Type a number please: "); 
bool success = Double.TryParse(Console.ReadLine(), out x1); 

我们正在做的事情是我们告诉C#来尝试输入转换为双。如果这可行,success为真,并且x1拥有该值。否则,成功是错误的,不会抛出异常。

注意:如果此语法令人困惑,请快速阅读关键字out的文档。

success变量允许您知道用户是否输入了一个数字。如果用户输入一个号码,例如你可以用这一切在一个循环,使程序只进展:

bool success = false; 
double x1; 
while (!success) 
{ 
    Console.WriteLine("Type a number please: "); 
    success = Double.TryParse(Console.ReadLine(), out x1); 
} 

,直至用户输入一个号码,这时它这个循环将一再重复将退出并且输入将被存储在x1中。您可以对第二个数字以及操作输入(加法,乘法等)重复此操作。

一个额外的一条建议,如果我可以,看看C#的switch关键字,从而节省您不必链这么多else if语句,还有break关键字,这使得在代码中retry变量不必要的。

编辑:为了防止“使用未分配的本地变量”,你将不得不给你的数字初始值。例如:

double x1 = 0.0; 

这不会影响,因为该方案,假设你用循环去了,执行不进展,直到一个有效的数字已输入和值已更改。

+0

非常感谢,但不是我的代码说x1和x2没有任何价值。 – user1930233

+1

对不起,错过了。检查编辑。 – stybl

+0

美妙,作品完美。也会像你说的那样查看switch语句, – user1930233

相关问题