当我输入字母而不是变量时,我的简单计算器程序在C#中出现问题
例如,当我的程序要求输入一个数字,我输入一个字母时,程序退出。那么,当输入一封信时,我怎么能让它什么也不做呢? 我在“int”或“strings”中看到过这种情况,但在“double”中没有看到。这真的让我很难受,我也不太明白这些问题是如何解决的当我输入字母而不是变量时,我的简单计算器程序在C#中出现问题,c#,calculator,letters-and-numbers,C#,Calculator,Letters And Numbers,例如,当我的程序要求输入一个数字,我输入一个字母时,程序退出。那么,当输入一封信时,我怎么能让它什么也不做呢? 我在“int”或“strings”中看到过这种情况,但在“double”中没有看到。这真的让我很难受,我也不太明白这些问题是如何解决的 static void Main(string[] args) { Console.WriteLine("type 'Exit' to leave this program."); Console.ReadLi
static void Main(string[] args)
{
Console.WriteLine("type 'Exit' to leave this program.");
Console.ReadLine();
Console.Clear();
Valuechoice: Console.WriteLine("Please choose a number.");
double value1 = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("Please choose a second Number.");
double value2 = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("What would you like to do to these numbeers?");
Console.WriteLine("Multiply");
Console.WriteLine("Divide");
Console.WriteLine("Add");
Console.WriteLine("subtract");
string operation = Console.ReadLine();
Console.WriteLine();
Console.Clear();
if (operation == "Multiply")
{
double total1;
total1 = (value1 * value2);
Console.WriteLine(total1);
Console.ReadLine();
Console.Clear();
goto Valuechoice;
}
if (operation == "Divide")
{
double total2;
total2 = (value1 / value2);
Console.WriteLine(total2);
Console.ReadLine();
Console.Clear();
goto Valuechoice;
}
if (operation == "Add")
{
double total3;
total3 = (value1 + value2);
Console.WriteLine(total3);
Console.ReadLine();
Console.Clear();
goto Valuechoice;
}
if (operation == "Subtract")
{
double total4;
total4 = (value1 - value2);
Console.WriteLine(total4);
Console.ReadLine();
Console.Clear();
goto Valuechoice;
}
if (Console.ReadLine() == "Exit")
{
Environment.Exit(0);
}
如果输入不是有效的double,将抛出FormatException
。改用
例如,您可以这样做,不断向用户询问有效号码:
double value1;
while(!double.TryParse(Console.ReadLine(), out value1))
{
Console.WriteLine("Please choose a valid number");
}
此外,这里也没有理由使用
goto
。我建议重新构造您的程序,改为使用循环。使用TryParse
-类似以下内容:
double value1;
while (!double.TryParse(Console.ReadLine(), out value1) {
Console.WriteLine("Please enter a valid number");
}
bool valid = true; // locally declared variable, this is important!
string value = Console.ReadLine();
valid = validateInput(value);
if (valid == true) {
double value1 = Convert.ToDouble(value);
// Proceed with calculations, etc
}
private bool validateInput(string value) {
bool valid = true;
foreach (char c in value)
{
if (char.IsLetter(c))
valid = false;
Console.WriteLine("Input is invalid!");
}
return valid;
}
不能将字母转换为双精度数字。这就像说把“e”变成小数点34.72。这是不可能的 试着这样做:
double value1;
while (!double.TryParse(Console.ReadLine(), out value1) {
Console.WriteLine("Please enter a valid number");
}
bool valid = true; // locally declared variable, this is important!
string value = Console.ReadLine();
valid = validateInput(value);
if (valid == true) {
double value1 = Convert.ToDouble(value);
// Proceed with calculations, etc
}
private bool validateInput(string value) {
bool valid = true;
foreach (char c in value)
{
if (char.IsLetter(c))
valid = false;
Console.WriteLine("Input is invalid!");
}
return valid;
}
只需将用户输入的内容读取为
字符串
,然后在尝试将其转换为Double
之前确定它是否为字母。这个问题实在是太本地化了。你最好用更一般的形式来表述你的问题。你也可以抓住Convert.ToDouble.Thank引发的异常。它的工作方式很有魅力。你能解释一下如何使用环路吗?我只是在学习如何编程。@TheMyQuin:非常好——基本上它只是在块内重复代码,直到括号内的条件为false。