2015-02-10 2 views
-1

В настоящее время у меня есть программа, которая переходит к вводу, которая изначально устанавливает значение b в TRUE (i.e b = 1). Затем вызывается оператор switch, устанавливая значение c в TRUE (i.e c = 1). Следующий вход от пользователя устанавливает значение b в FALSE, но по какой-либо причине оператор first if никогда не получается, так как строка "mvprintw(22,24,"It has reached it");" никогда не печатается на моем экране, несмотря на то, что значение b является ложным (b = 1), а значение c теперь истинно (c = 1).Если оператор в случаях не работает/достигнут

Я пытался использовать вложенные if вместо случаев, но это продолжает усложнять ситуацию и, откровенно говоря, не работает. Любой вклад в этот вопрос был бы очень признателен!

int moveC(int y, int x, int b, int i) 
    { //first input from user, b is True, so first case occurs 
     //second input from user, b is false, so second case occurs, however, the if first if statement is never reached, but the second one is 
     int c = FALSE; 

     switch(b) 
     { 
      case TRUE: 
       c = TRUE; //this part is first reached from initall user input 
       refresh(); 
       mvprintw(26,26,"value of c is... %d",c); 
       break; 

      case FALSE: 
       if(c == 1) //this part is never reached, even though the second user input is (b = 0 i.e false, and c = 1, i.e true) 
       { 
         mvprintw(22,24,"It has reached it"); 
         mvprintw(y,x+7,"^"); 
         refresh(); 
         break; 
       } 

       else if(c == 0) //this if statement is always used even if c is not zero 
       { 
        mvprintw(y,x,"^"); 
        refresh(); 
        break; 
       } 
+1

Пожалуйста, пост полный compileable пример. – AndyG

+1

Как правило, плохой практикой в ​​C является представление ложных логических значений точных значений. «TRUE» отличен от нуля; «FALSE» равно нулю в C, но значение вашего переключателя для «TRUE» - это только то, что (я полагаю) вы определили где-то этим запутанным определением макроса. Используйте перечисления, используйте флаги, используйте константы, но не используйте TRUE и FALSE в C. – mpez0

+0

@ mpez0 Я думаю, что то же самое, просто используйте 'if (booleanValue! = 0)' и 'if (booleanValue == 0)'. И использование 'FALSE' и' TRUE' в 'switch' бесполезно. –

ответ

2

в вы объявляете

int c = FALSE; 

, что делает его автоматические переменными проживания в стеке, поэтому при каждом вызове, c не создаются и снова инициализируется FALSE и условие c == 1 в case TRUE может никогда становятся истинными. Если вы хотите во втором вызове иметь значение, назначенное в первом вызове, вы должны объявить его

static int c = FALSE; 
Смежные вопросы