无法根据条件访问 [英] Not able to access according to the condition

查看:59
本文介绍了无法根据条件访问的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我分配 int r,s,t,u,v; 没有if条件正常工作。

当我指定 int r = 0,s = 0,t = 0,u = 0,v = 0; 所有条件都有效。

我是无法找到错误。

 int r,s,t,u,v; 
if((mouseXPos< 130&& mouseXPos> 30&& mouseYPos> 365&& mouseYPos< 410)&&(s == 0)&& (t == 0)&&(u == 0)&&(v == 0))
{
drawMenu(0);
r = 1;
}
if((mouseXPos< 230&& mouseXPos> 130&& mouseYPos> 365&& mouseYPos< 410)&&(r == 0 )&&(t == 0)&&(u == 0)&&(v == 0))
{
drawMenu(1);
s = 1;
}
if((mouseXPos< 330&& mouseXPos> 230&& mouseYPos> 365&& mouseYPos< 410)&&(r == 0 )&&(s == 0)&&(u == 0)&&(v == 0))
{
drawMenu(2);
t = 1;
}
if((mouseXPos< 430&& mouseXPos> 330&& mouseYPos> 365&& mouseYPos< 410)&&(r == 0 )&&(s == 0)&&(t == 0)&&(v == 0))
{
drawMenu(3);
u = 1;
}
if((mouseXPos< 530&& mouseXPos> 430&& mouseYPos> 365&& mouseYPos< 410)&&(r == 0 )&&(t == 0)&&(u == 0)&&(s == 0))
{
drawMenu(4);
v = 1;
}
if(mouseXPos< 130&& mouseXPos> 30&& mouseYPos< 185&& mouseYPos> 140)
{
drawMenu (5);
}

void drawMenu(短b)
{

int k = 0,i = 0,j = 0;
if(b == 0)
{
a =& touch_menu [0];
for(k = 0; k< a-> c; k ++)
{
setColor(GRAY);
drawRectangle(a-> startXPos,a-> startYPos - (k + 1)* a-> height,a-> width,a-> height);
}
setColor(CYAN);
for(i = 0; i< a-> c; i ++)
{
drawText(38,150 + j,a-> sub_Menu [i],0);
j = j + 45;
}


}

否则if(b == 1)
{
a =& touch_menu [1] ;
for(k = 0; k< a-> c; k ++)
{
setColor(GRAY);
drawRectangle(a-> startXPos,a-> startYPos - (k + 1)* a-> height,a-> width,a-> height);
}
setColor(CYAN);
for(i = 0; i< a-> c; i ++)
{
drawText(138,195 + j,a-> sub_Menu [i],0);
j = j + 45;
}

}
else if(b == 2)
{
a =& touch_menu [2];
for(k = 0; k< a-> c; k ++)
{
setColor(GRAY);
drawRectangle(a-> startXPos,a-> startYPos - (k + 1)* a-> height,a-> width,a-> height);
}
setColor(CYAN);
for(i = 0; i< a-> c; i ++)
{
drawText(238,240 + j,a-> sub_Menu [i],0);
j = j + 45;
}

}
else if(b == 3)
{
a =& touch_menu [3];
for(k = 0; k< a-> c; k ++)
{
setColor(GRAY);
drawRectangle(a-> startXPos,a-> startYPos - (k + 1)* a-> height,a-> width,a-> height);
}
setColor(CYAN);
for(i = 0; i< a-> c; i ++)
{
drawText(338,195 + j,a-> sub_Menu [i],0);
j = j + 45;
}
}
else if(b == 4)
{

a =& touch_menu [4];
for(k = 0; k< a-> c; k ++)
{
setColor(GRAY);
drawRectangle(a-> startXPos,a-> startYPos - (k + 1)* a-> height,a-> width,a-> height);
}
setColor(CYAN);
for(i = 0; i< a-> c; i ++)
{
drawText(438,285 + j,a-> sub_Menu [i],0);
j = j + 45;
}
}
else if(b == 5)
{
a =& touch_menu [5];
for(k = 0; k< a-> c; k ++)
{
setColor(GRAY);
drawRectangle(a-> startXPos,a-> startYPos - (k + 1)* a-> height,a-> width,a-> height);
}
for(i = 0; i< a-> c; i ++)
{
drawText(138,150 + j,a-> sub_Menu [i],0 );
j = j + 45;

}
}
}

解决方案

当我指定int r,s,t,u,v;没有if条件工作。 
当我指定int r = 0时,s = 0,t = 0,u = 0,v = 0;所有条件都有效。



嗯,是的,这就是我所期望的。



In C,当你声明一个变量时:

  int  x; 

你分配它的空间,但你没有分配一个值,系统不会为你创建一个:从上次使用时内存中的任何内容 - 可以是从字符串的一部分到指针的任何内容,具体取决于什么你的代码在运行时到那时为止 - 留在变量中。

当你声明一个变量时

  int  x =  0 ; 

您为它分配空间,并说我希望这是零所以系统有义务。



在你的代码中,你声明了变量,但在if条件中使用它们之前不要为它们赋值:所以它们包含的值和您测试的值是随机的,不太可能为零!

When i assign int r, s, t, u, v; none of the if conditions are working.
When i assign int r=0, s=0, t=0, u=0, v=0; all the if conditions are working.
I am not able to find the error.

int r, s, t, u, v;
    if((mouseXPos < 130 && mouseXPos > 30 && mouseYPos > 365 && mouseYPos < 410)&&(s==0)&&(t==0)&&(u==0)&&(v==0))
        {
            drawMenu(0);
            r=1;
        }
   if((mouseXPos < 230 && mouseXPos > 130 && mouseYPos > 365 && mouseYPos < 410)&&(r==0)&&(t==0)&&(u==0)&&(v==0))
        {
            drawMenu(1);
            s=1;
        }
   if((mouseXPos < 330 && mouseXPos > 230 && mouseYPos > 365 && mouseYPos < 410)&&(r==0)&&(s==0)&&(u==0)&&(v==0))
        {
            drawMenu(2);
            t = 1;
        }
    if((mouseXPos < 430 && mouseXPos > 330 && mouseYPos > 365 && mouseYPos < 410)&&(r==0)&&(s==0)&&(t==0)&&(v==0))
        {
            drawMenu(3);
            u = 1;
        }
    if((mouseXPos < 530 && mouseXPos > 430 && mouseYPos > 365 && mouseYPos < 410)&&(r==0)&&(t==0)&&(u==0)&&(s==0))
        {
            drawMenu(4);
            v = 1;
        }
    if(mouseXPos < 130 && mouseXPos > 30 && mouseYPos < 185 && mouseYPos > 140)
        {
            drawMenu(5);
        }

void drawMenu(short b)
   {

       int k = 0, i = 0, j = 0;
       if(b == 0)
          {
              a = &touch_menu[0];
             for(k=0; k<a->c; k++)
              {
                 setColor(GREY);
                 drawRectangle(a->startXPos, a->startYPos - (k+1)*a->height,a->width,a->height);
              }
                  setColor(CYAN);
                  for(i=0; i<a->c; i++)
                    {
                      drawText(38,150+j,a->sub_Menu[i],0);
                      j = j+45;
                    }


          }

        else if(b==1)
          {
             a = &touch_menu[1];
             for(k=0; k<a->c; k++)
              {
                 setColor(GREY);
                 drawRectangle(a->startXPos, a->startYPos - (k+1)*a->height,a->width,a->height);
              }
                  setColor(CYAN);
                   for(i=0; i<a->c; i++)
                  {
                    drawText(138,195+j,a->sub_Menu[i],0);
                    j = j+45;
                  }

          }
         else if(b==2)
          {
             a = &touch_menu[2];
             for(k=0; k<a->c; k++)
              {
                 setColor(GREY);
                 drawRectangle(a->startXPos, a->startYPos - (k+1)*a->height,a->width,a->height);
              }
                  setColor(CYAN);
                   for(i=0; i<a->c; i++)
                  {
                    drawText(238,240+j,a->sub_Menu[i],0);
                    j = j+45;
                  }

          }
        else if(b==3)
          {
             a = &touch_menu[3];
             for(k=0; k<a->c; k++)
              {
                 setColor(GREY);
                 drawRectangle(a->startXPos, a->startYPos - (k+1)*a->height,a->width,a->height);
              }
                  setColor(CYAN);
                   for(i=0; i<a->c; i++)
                  {
                    drawText(338,195+j,a->sub_Menu[i],0);
                    j = j+45;
                  }
          }
        else if(b==4)
          {

             a = &touch_menu[4];
             for(k=0; k<a->c; k++)
              {
                 setColor(GREY);
                 drawRectangle(a->startXPos, a->startYPos - (k+1)*a->height,a->width,a->height);
              }
                  setColor(CYAN);
             for(i=0; i<a->c; i++)
                  {
                    drawText(438,285+j,a->sub_Menu[i],0);
                    j = j+45;
                  }
          }
        else if(b==5)
          {
              a = &touch_menu[5];
              for(k=0; k<a->c; k++)
              {
                 setColor(GREY);
                 drawRectangle(a->startXPos, a->startYPos - (k+1)*a->height,a->width,a->height);
              }
             for(i=0; i<a->c; i++)
             {
                 drawText(138,150+j,a->sub_Menu[i],0);
                    j = j+45;

             }
          }
   }

解决方案

When i assign int r, s, t, u, v; none of the if conditions are working.
When i assign int r=0, s=0, t=0, u=0, v=0; all the if conditions are working.


Well, yes, that is what I would expect.

In C, when you declare a variable:

int x;

you allocate space for it, but you do not assign a value, and the system will not create one for you: whatever is in that memory from the last time it was used - which could be anything from part of a string to a pointer depending on what your code did at run time up to that point - is left in the variable.
When you declare a variable

int x = 0;

You allocate space for it, and say "I want this to be zero" so the system obliges.

In your code, you declare the variables, but do not assign any value to them before you use them in the if conditions: so the values they contain and that you test against are random, and unlikely to be zero!


这篇关于无法根据条件访问的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆