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

privatevoidbutton12_Click(objectsender,EventArgse){inta,b,result=0;charm='',n;intpos=... 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;
case '*':
result = a * b;
break;
case '/':
result = a / b;
break;
default:
textBox1.Text = "ERROR"; break;

}

textBox1.Text = Convert.ToString(result);

}

在运行计算器时,点了“=”过后显示的错误
错误行即为 a = Convert.ToInt32(str.Substring(0, pos - 1));
不知道是为什么
展开
 我来答
2810caijing
推荐于2016-03-07 · 超过16用户采纳过TA的回答
知道答主
回答量:57
采纳率:0%
帮助的人:0
展开全部
首先肯定是你textbox里面的格式不对,你是否运行的时候textbox里面是空的,你可以将textBox1.Text属性给予例如”1+2“试一下
如果不想加可以在程序里面加个判断
if(textBox1.Text != "")
{
//你上面所有的代码
}
s实在不行可以设置中断按F11单步调试
firechun
2009-05-16
知道答主
回答量:11
采纳率:0%
帮助的人:0
展开全部
格式异常,对你的代码来说,错误在于str的值。
SubString()方法,第一个参数是子字符串开始位置,第二个参数是子字符串长度,很显然,出错的原因是pos-1的值大于str的长度,或者pos-1小于等于零。

你的代码主要是没对变量的有效性做检查。跟踪一下,看看str的值,错误应该就是str的长度小于pos-1。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
帐号已注销
2009-05-31 · 超过37用户采纳过TA的回答
知道答主
回答量:225
采纳率:0%
帮助的人:120万
展开全部
a = Convert.ToInt32(str.Substring(0, pos - 1));
里的pos 可能等于1,那么pos -1就等于0
结果就是 a="" 或者a=null
这样肯定会报转换异常
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yocidan
2009-05-16 · 超过27用户采纳过TA的回答
知道答主
回答量:98
采纳率:0%
帮助的人:0
展开全部
System.FormatException说明是格式异常。
你换个方式转换它的格式。其实你的b也存在同样的问题,只是系统捕抓到a的,就不在往下捕抓而已。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
郁闷_下
2009-05-16 · 超过17用户采纳过TA的回答
知道答主
回答量:33
采纳率:0%
帮助的人:0
展开全部
Copy了你的代码,在这这运行没错啊?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式