日期:2014-05-18  浏览次数:20871 次

新手请教while循环的变量作用域问题
我要写个程序,需要实现的功能是:逐行读取文本内容,判断每行的内容。如果所有行都符合要求,那么执行动作A。只要有1行内容不符合要求,那么执行动作B。

我写的程序结构如下
while (文本不为空)
{
 string AAA = 'Initial'; //声明一个变量
  if (本行符合要求)
  {
  读取下一行;
  line++;
  }
  else
  {
  AAA = 'NO';
  break;
  }
//前面这段是为了得到string AAA的值,

//下面根据AAA的值来判断是执行动作A还是动作B(又来一个循环,把文本每一行插入数据库)
  while (AAA= 'NO') //这里的AAA有问题了,一直都是初始值'Initial',不会得到'NO'这个值
  {
  ..
  }
}
需要怎么样才能使第二个循环里面,AAA的值会变为'NO',而不是一直都是声明这个变量时的初始值'Initial'呢?


------解决方案--------------------
定义在外面。
{}块中的变量是无法在外面得到的。
------解决方案--------------------
当AAA=="B"的时候,就Break,退出了第一个While循环,第二个While就不会被执行
只有当AAA == 'Initial'时,才会执行第二个While,所以你在第二个While出得到的AAA总是为初始值
------解决方案--------------------
你的break直接break出while循环了.... 下面红字的while循环是不会执行的
逻辑问题...理清思路,看看break在那里合不合适 还有第二个while到底该写在哪(如果用break的话)
------解决方案--------------------
那就把 AAA 和第二个 while 都放外面
C# code
string AAA = "Initial"; //声明一个变量

while (文本不为空)
{
    if (本行符合要求)
    {
        //读取下一行;
        line++;
    }
    else
    {
        AAA = "NO";
        break;
    }
    //前面这段是为了得到string AAA的值,
}

//下面根据AAA的值来判断是执行动作A还是动作B(又来一个循环,把文本每一行插入数据库)
while (AAA == "NO") //这里的AAA有问题了,一直都是初始值'Initial',不会得到'NO'这个值
{
    //..
}