写了一个c#程序,其目的是根据鼠标点form的事件发生的次数决定赋值,即第一次传来一个值,第二次传来一个值
计算两个值的差
程序如下:
bool ClickNumber = true;
psspd  (Event,..)  //这是事件处理程序,详细就略去了
{
    float a,b,result;
    if (ClickNumber)
    {
        a = e.x;//这里接受点击传来一个值
        ClickNumber = false;
    }
    else
    {
        b = e.x;
        result = b -a;
        ClickNumber = true;
    }
}
第一次编译后,告诉我“未赋值的局部变量”,因此将上面改成了
float a = 0, b = 0, result = 0;
此时可以通过,但result不等于b-a,而是等于b,经过调试跟踪发现是这样的:
  第一次点了form后,进入if中,给a赋值成功,比如为10.0;
  第二次点form后,进入else中,此时给b赋值为30.0,都对,
  可是此时a成为0.0了而不是刚才的10.0了,直接造成结果result不对了,请问这样为什么

解决方案 »

  1.   

    因为每次执行这个方法,你都定义了新的a b result。
      

  2.   

     float a,b,result;
    局部变量必须先赋初值。。不然C#编译器会提示出错的
      

  3.   

    float a,b,result;
    C#中局部变量必须赋初值。不然提示出错
    全局变量不需要
      

  4.   

    给float a = 0设置断点
    你会发现每次点form后都会执行
    因为这是局部变量在form的代码部分生命静态成员吧
    public partial class Form1 : Form
        {
            static float a = 0;
            static float b = 0;        public Form1()
            {
                InitializeComponent();
            }
     略还是不太理解你的需求,肯定有些没说全吧