C# 如何为无输入设置异常处理
这是我的程序,用于输入2个数字和一个运算符,然后进行计算并给出答案(感谢async之前的帮助)。到目前为止,除了我什么都没有输入之外,一切都很好。我试图让它说没有输入,再试一次,但它只是崩溃了。有人知道为什么吗?提前谢谢C# 如何为无输入设置异常处理,c#,C#,这是我的程序,用于输入2个数字和一个运算符,然后进行计算并给出答案(感谢async之前的帮助)。到目前为止,除了我什么都没有输入之外,一切都很好。我试图让它说没有输入,再试一次,但它只是崩溃了。有人知道为什么吗?提前谢谢 using System; class Calculation { public static void Main(string[] data) { if (data.Length == 0) { Con
using System;
class Calculation
{
public static void Main(string[] data)
{
if (data.Length == 0)
{
Console.WriteLine("No input... Try again");
return;
}
double result;
if (!Double.TryParse(data[0], out result))
{
Console.WriteLine("Invalid input: " + data[0]);
return;
}
Console.WriteLine("Starting with number: " + result);
char op;
double number;
string errorMessage;
do
{
if (!TryGetData(out op, out number, out errorMessage))
{
Console.WriteLine("Invalid input: " + errorMessage);
continue;
}
switch (op)
{
case '+':
result += number;
break;
case '-':
result -= number;
break;
case '*':
result *= number;
break;
case '/':
result /= number;
break;
default:
Console.WriteLine("Done");
continue;
}
Console.WriteLine("Result = " + result.ToString());
} while (Char.ToLower(op) != 'q');
}
static bool TryGetData(out char anOperator, out double aNumber, out string message)
{
aNumber = 0;
message = null;
Console.Write("Enter an operator and a number or 'q' to quit: ");
var line = Console.ReadLine();
anOperator = line[0];
if (anOperator != 'q' && anOperator != 'Q')
{
if (line.Length <= 2)
{
message = "Enter an operator followed by a space and then a number.";
return false;
}
var isValidNumber = Double.TryParse(line.Substring(2), out aNumber);
if (!isValidNumber)
{
message = "Invalid input: " + line.Substring(2);
return false;
}
if (isValidNumber && (anOperator == '/' && aNumber == 0))
{
message = "Cannot divide by 0.";
return false;
}
if (line[1] != ' ')
{
message = "Make sure to put a space between operator and number.";
return false;
}
}
return true;
}
}
使用系统;
阶级计算
{
公共静态void Main(字符串[]数据)
{
如果(data.Length==0)
{
WriteLine(“无输入…重试”);
回来
}
双重结果;
如果(!Double.TryParse(数据[0],输出结果))
{
Console.WriteLine(“无效输入:+数据[0]);
回来
}
Console.WriteLine(“以数字开头:+结果”);
char op;
双数;
字符串错误消息;
做
{
如果(!TryGetData(输出op、输出编号、输出错误消息))
{
Console.WriteLine(“无效输入:+errorMessage”);
持续
}
开关(op)
{
格“+”:
结果+=数字;
打破
案例'-':
结果-=数量;
打破
案例“*”:
结果*=数字;
打破
案例“/”:
结果/=数字;
打破
违约:
控制台。写入线(“完成”);
持续
}
Console.WriteLine(“Result=“+Result.ToString());
}while(Char.ToLower(op)!='q');
}
静态bool TryGetData(输出字符运算符、输出双数、输出字符串消息)
{
a数=0;
消息=null;
控制台。写入(“输入一个运算符和一个数字或'q'退出:”);
var line=Console.ReadLine();
运算符=行[0];
if(anOperator!='q'&&anOperator!='q')
{
如果(line.Length您告诉它检查一个空变量的Length属性。
如果要删除,可以检查是否为null,然后检查长度
C#本质上是一种短路语言,如果if语句的第一部分为假(或真),则不会对其他部分进行计算
if (data == null || data.length == 0)
{
Console.WriteLine("No input... Try again");
return;
}
“但它只是崩溃了”-请在调试器中运行它,因为它会更快。我们不是来为您调试整个代码的。祝您好运!请尝试data==null,但data.lengthif除外(data==null | | data.length==0)很抱歉,我本应将此内容放在原始帖子中,但错误是system.string.get_chars at calculation.trygetdata at calculation.main处的system.indexoutofrangeexception,并且在添加if(data==null | | data.length==0)后仍会发生错误感谢您的回复和解释,在执行您所说的操作后,错误仍然会发生。错误是system.string.get_chars at calculation.trygetdata at calculation.main上的system.indexoutofrangeexception