2015-10-22 3 views
-4

У меня есть функцияв то время как заявление с функцией

int is_true(int a[]){ 
    int is_true; 

    if(a[0] != a[5]){ 
     is_true= 0; 
    }else if(a[2] != a[4]){ 
     is_true= 0; 
    }else{ 
     is_true= 1; 
    } 
    return is_true; 
} 

и у меня есть еще одна функция, где я хочу, чтобы вставить время цикла, при условии, что до тех пор, как is_true = 0 она будет продолжать идти. но я получаю это предупреждение:

сравнения функции 'is_true' равно нулевой указатель всегда ложь [-Wtautological-указатель сравнения] pal.c/exercise1 линия 61 C/C++ Проблема

моя другая функция

while(is_true == 0){ 
     c = getchar(); 

    if(c =='a'){ 
     if(p ==&a[0]){ 
      printf("Sorry, no more moves this way \n"); 
     }else{ 
     p--; 
     printf("pointer is now at: %d\n ", *p); 
     } 
    } 
    else if(c=='d'){ 
     p++; 
     printf("pointer is now at: %d\n ", *p); 
    } 
    else if(c=='w'){ 
     (*p) = (*p+1); 
     printf("the value is now: %d\n ", (*p)); 
    } 
    else if(c=='s'){ 
       (*p) = (*p-1); 
       printf("the value is now: %d\n ", (*p)); 
    } 
} 
+0

измените название функции. –

+0

Вам нужно вызвать функцию, а не только 'is_true == 0'. – Downvoter

+0

Представленное сообщение об ошибке не соответствует представленному вами коду. Нигде код не выполняет сравнение с любой функцией (или переменной) с именем 'is_true'. –

ответ

4

у вас есть функцию и переменную с тем же именем, is_true. Не делай этого.

+0

после того, как я это сделал, в моей второй функции, должен ли я сначала вызвать is_true(), а затем поместить переменную как мое условие while? –

+0

Я не могу сказать, потому что код до вызова этой функции отсутствует. –

+1

@DavidSchwartz, конечно, использование OP является стилистически сомнительным, но это не так. Локальная переменная 'is_true' затеняет функцию' is_true() 'внутри тела функции. –

1

Ваша функция is_true имеет локальную переменную с тем же именем. Чтобы исправить проблему, просто смените имя функции на f_is_true.

1

Предположив, что идентификатор is_true, который виден ваш время цикла относится к функции is_true(), что вы представили, ошибка указывает на то, что вы сравниваете указатель на эту функцию с нулевым указателем постоянным, что сравнение всегда будет оценивать к ложному.

То, что вы хотите сделать, это, конечно, сравнивать 0 с результатом вызова функцию, которая будет выглядеть следующим образом:

while (is_true(a) == 0) { 
    /* ... */ 
} 

, полагая, что искомый аргумент a.

Обратите внимание, что между локальными переменными функции a и is_true нет никаких неотъемлемых отношений и любых переменных с одинаковым именем в программе.

Смежные вопросы