在外部定义了个 int count=0; 用来接受case中的count++;
int tagNode 是一个外部输入字符
swith(tagNode){
  case 1:
    count++;
    break;
  case 2:
    count++;
    break;
  case 3:
    count++;
    break;
  case 4:
    if(count==3){
    Console.WriteLine("在范围内");
    break;
    }
    else{
    Console.WriteLine("不在范围"); 
    break;
    }
    break;
}需要前3个case都访问到后才能执行 case 4的 否则输出不在范围。。请高手指点指点

解决方案 »

  1.   

    不可能前三个都访问到,这是一个条件语句,就好像if一样,你可以试试这样写:
    swith(tagNode){ 
      case 1: 
        count++; 
      case 2: 
        count++; 
      case 3: 
        count++; 
      case 4: 
        if(count==3){ 
        Console.WriteLine("在范围内"); 
        break; 
        } 
        else{ 
        Console.WriteLine("不在范围"); 
        break; 
        } 
        break; 

    把前三个break去掉!
      

  2.   

    你这样写的逻辑已经可以保证前3个case都访问到后才会判断 case 4,有什么问题吗?
      

  3.   

    如果int count=0;
     
    swith(tagNode){ 
      case 1: 
        count++; 
        break; 
      case 2: 
        count++; 
        break; 
      case 3: 
        count++; 
        break; 
      case 4: 
        if(count==3){ 
        Console.WriteLine("在范围内"); 
        break; 
        } 
        else{ 
        Console.WriteLine("不在范围"); 
        break; 
        } 
        break; 
    } 那Console.WriteLine("在范围内");  永远不会执行swith 一次只执行一个case
      

  4.   

    swith(tagNode){ 
      case 1: 
    bln1=true;
        break; 
      case 2: 
    bln2=true;
        break; 
      case 3: 
    bln3=true;
        break; 
      case 4: 
        if(bln1 && bln2 && bln3){ 
        Console.WriteLine("在范围内"); 
        break; 
        } 
        else{ 
        Console.WriteLine("不在范围"); 
        break; 
        } 
        break; 
    }   
    *****************************************************************************
    欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码) http://feiyun0112.cnblogs.com/
      

  5.   

    如果你的意思是想把前三个case都走到,都执行,可以试下去掉前三个的break,如果你不是这个意思,只是想根据tagNode来判断,那么它只能走一个case
      

  6.   

    你这个缺心眼的,你才遭雷劈!我开着VS2008当场测试的,而且我也写过那种Switch,有事实根据的,如果每个case要去掉break;必须去掉内部任何执行语句才被允许,你那个是C++里的写法,C#禁止的。
      

  7.   

    偶了,怪我没有说清楚,除了去掉前三个条件的break,还要去掉里边的条件才可以执行,竟顾解题了,小女子向青龙白虎道歉,敢作敢当!
      

  8.   

    我是想前3个case访问后才能执行第四个case里面的代码。
    前3个CASE是代表了3个标签的确认按钮,第四的CASE是 另外一个标签的确认按钮。只有在前3个标签的确认按钮被点击后才能让第四个标签的确认按钮正常工作,否则就报警。具体就是这个意思。
      

  9.   

    case 里面的条件不能去掉的。
      

  10.   

    既然是那个意思,那你就不能简单的是用count++来判断了,因为如果同一个按钮被按了两次,也会被count++的。你可以使用按位运算法,修改tagNode的值为1、2、4、8:            int flag = 0;//请声明为全局变量,需要保存该值。            switch (tagNode)
                {
                    case 1:   //第一个按钮被按下
                    case 2:   //第二个按钮被按下
                    case 4:   //第三个按钮被按下
                        flag |= tagNode;
                        break;
                    case 8:   //第四个按钮被按下
                        if (flag == 7)
                        {
                            Console.WriteLine("在范围内");
                            break;
                        }
                        else
                        {
                            Console.WriteLine("不在范围");
                            break;
                        }
                }
      

  11.   


    这种写法 会在case 4 中一直是else不会进入if
      

  12.   

    2楼的错误,C#里一个CASE 不能直接到下一个CASE....C++里可以
    你把COUNT定义在循环外面,就行了.int tagNode 是一个外部输入字符
    int count=0;
    for(.........)
    {
    swith(tagNode){
      case 1:
        count++;
        break;
      case 2:
        count++;
        break;
      case 3:
        count++;
        break;

    }
    if(count==3){
        Console.WriteLine("在范围内");
        }
        else{
        Console.WriteLine("不在范围");
      

  13.   


    但是tagNode的值是固定的。标签按下的顺序可能不固定。也有可能是标签3被先按。
    标签tagNode也是按顺序增长的。 
      

  14.   

    如果定义在外循环。这个程序是用时间控件一直在调用那么一直循环那么count不就一直在增长了
      

  15.   

    你的意思是:tagNode你不能自定义?
    那就麻烦些,多点代码,一样可以实现,至于按下的先后顺序无所谓,你可以自己测试:           int flag = 0;//请声明为全局变量,需要保存该值。             switch (tagNode)
               {
                  case 1:   //第一个按钮被按下
                        flag |= 1;
                      break;
                    case 2:   //第二个按钮被按下
                        flag |= 2;
                      break;
                    case 3:   //第三个按钮被按下
                        flag |= 4;
                      break;
                  case 4:   //第四个按钮被按下
                        if (flag == 7)
                        {
                            Console.WriteLine("在范围内");
                            break;
                        }
                        else
                        {
                            Console.WriteLine("不在范围");
                            break;
                        }
                }
      

  16.   

    而且我这样也可以很方便知道哪些按钮按下过。
    flag==1说明按钮1按下过;
    flag==2说明按钮2按下过;
    flag==3说明按钮1、2按下过;
    flag==4说明按钮3按下过;
    flag==5说明按钮1、3按下过;
    flag==6说明按钮2、3按下过;
    flag==7说明按钮1、2、3按下过;重新统计只要把flag置为0即可。
      

  17.   

    我晕倒,又不是可能被按下2次,那你原来那个方法就足够了啊,我就不明白你是怎么调用的,估计问题在你调用上出的问题。如果每一次按下都执行一次Switch判断,并将结果保持在全局变量中,那就肯定不会有问题的,难道你的int count=0是在每次按下一个标签后都去初始化的。
      

  18.   

    int tagNode 是一个外部输入字符 
    for (int i=0;i<=3;i++ )
    {
    swith(tagNode){ 
      case 1: 
        count++; 
        break; 
      case 2: 
        count++; 
        break; 
      case 3: 
        count++; 
        break; 
      case 4: 
        if(count==3){ 
        Console.WriteLine("在范围内"); 
        break; 
    }
        } 
        else{ 
        Console.WriteLine("不在范围"); 
        break; 
        } 
        break; 

    这样行吗?