c#中的未处理 System.FormatException问题

来源:百度知道 编辑:UC知道 时间:2024/06/08 10:28:22
private void button12_Click(object sender, EventArgs e)
{

int a, b, result = 0;
char m = ' ', n;
int pos = 0;
while (m != '+' && m != '-' && m != '*' && m != '/')
{
m = Convert.ToChar(textBox1.Text.Substring(pos, 1));
pos++;
}
string str = Convert.ToString(textBox1.Text);
a = Convert.ToInt32(str.Substring(0, pos - 1));
b = Convert.ToInt32(str.Substring(pos, textBox1.Text.Length - pos));
n = Convert.ToChar(str.Substring(pos - 1, 1));
switch (n)
{
case '+':
result = a + b;
break;
case '-':
result = a - b;
break;

首先肯定是你textbox里面的格式不对,你是否运行的时候textbox里面是空的,你可以将textBox1.Text属性给予例如”1+2“试一下
如果不想加可以在程序里面加个判断
if(textBox1.Text != "")
{
//你上面所有的代码
}
s实在不行可以设置中断按F11单步调试

格式异常,对你的代码来说,错误在于str的值。
SubString()方法,第一个参数是子字符串开始位置,第二个参数是子字符串长度,很显然,出错的原因是pos-1的值大于str的长度,或者pos-1小于等于零。

你的代码主要是没对变量的有效性做检查。跟踪一下,看看str的值,错误应该就是str的长度小于pos-1。

a = Convert.ToInt32(str.Substring(0, pos - 1));
里的pos 可能等于1,那么pos -1就等于0
结果就是 a="" 或者a=null
这样肯定会报转换异常

Copy了你的代码,在这这运行没错啊?

System.FormatException说明是格式异常。
你换个方式转换它的格式。其实你的b也存在同样的问题,只是系统捕抓到a的,就不在往下捕抓而已。

asp.net C#用户代码未处理 System.InvalidOperationException 用户代码未处理 System.NullReferenceException 未处理 System.Data.SqlClient.SqlException VB中的未处理的“System.Data.SqlClient.SqlException”类型的异常出现在 system.data.dll 中。是怎么回事 c#高手进哦System.Runtime.InteropServices.COMException: HRESULT 中的异常:0xE004002A 未处理的“System.Data.OleDb.OleDbException”类型的异常出现在 system.data.dll 中。 未处理的“System.ArgumentException”类型的异常出现在 system.windows.forms.dll 中。 未处理的“System.Data.SqlClient.SqlException”类型的异常出现在 system.data.dll 中。 未处理的“System.StackOverflowException”类型的异常出现在 system.windows.forms.dll 中。 未处理的“System.NullReferenceException”类型的异常出现在 system.windows.forms.dll 中。