2015-09-04 4 views
-3

У меня есть код folliwing:Логический тест не в программе с неожиданным выходом

void main() 
{ 
    int a=30,b=40,x; 
    x=(a!=10) && (b=50); 
    printf("x=%d",x); 
} 

Вот в результате я получаю x=1. В операторе && условие истинно, только если оба значения истинны здесь, первое верно, т. Е. Не равно 10, но второе - b=50, что неверно, а также значение x - это 1 выход. Почему это происходит ?

+3

Проверьте разницу между «=» и «==»! – psmears

+4

должно быть b == 50 – OldProgrammer

+2

Боже, они все еще делают Turbo C? –

ответ

4

В вашем коде, измените

... && (b=50); 

к

... && (b == 50); 

В противном случае значение из b, после присваивания, будет рассматриваться в качестве второго выражения оператора && ,

+0

Или еще лучше: '50 == b' – KIIV

+1

@KIIV Йода, а? Конечно, вы можете это сделать. :) –

4

Второе сравнение на самом деле является заданием. Она должна быть:

x=(a!=10) && (b==50); 
0

Выражение (b=50) имеет логическое значение 1 (true), не 0 (false).

2

Вы используете оператор присваивания =, а не тест эквивалентности ==, оператор b.

Fixed Листинг


#include <stdio.h> 

void main() 
{ 
    int a=30, b=40, x; 
    x = ((a!=10) && (b==50)); 
    printf("x=%d",x); 
} 

Хорошая стратегия, чтобы предотвратить это в будущем обменять ваш LVALUE и RVALUE, так что ваш код выглядит следующим образом:

x = ((10 != a) && (50 == b)); 

Если вы придерживаетесь вышеуказанного стиля, если вы делаете ту же ошибку в будущем, вы бы в конечном итоге с:

50 = b 

Какой бы вызвать ошибку компиляции, так как вы не можете присвоить переменной RVALUE к постоянной/буквального LVALUE.

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

  • Нет связанных вопросов^_^