我刚从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:
}
}
}
}
答案 0 :(得分:1)
您可以使用Double.TryParse确保用户的输入是有效的双倍。如果接收到无效输入,则此方法的好处是不会抛出异常。
用法如下:
double x1;
Console.WriteLine("Type a number please: ");
bool success = Double.TryParse(Console.ReadLine(), out x1);
我们在这里做的是告诉C#尝试将输入转换为double。如果此方法有效,则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
语句,以及{{{ 3}}关键字,这使得代码中的retry
变量变得不必要。
编辑:为防止"使用未分配的本地变量",您必须为您的号码提供初始值。例如:
double x1 = 0.0;
这不会影响程序,因为假设您使用循环,执行不会进行,直到输入有效数字并且该值已更改。