¿Qué significa esta advertencia ( i
y j
no son constantes):
He estado tratando de buscar en Google esto, pero no me da ningún resultado.
advertencia: la comparación de la constante 10 con la expresión booleana siempre es verdadera [-Btutológico-constante-fuera de rango-comparación]
if ((0<=i<=10)&&(0<=j<=10)){
En mi progtwig, i
y j
no son valores constantes y sí cambian.
En C
, el encadenamiento de operadores relacionales como este no es un diseño válido. Así,
(0<=i<=10)
No está haciendo lo que usted cree que debería estar haciendo. se está evaluando como
((0<=i) <= 10 )
que es básicamente cualquiera
0 < = 10
, produciendo 1
(considerado valor VERDADERO) 1 < = 10
, también produce 1
(considerado valor VERDADERO) Lamentablemente, ambos son mucho más que el camino esperado.
Solución: usted necesita desglosar su cheque de condiciones como
(0 <= i) && ( i<=10)
Las otras respuestas ya han explicado el problema central. Puedes usar:
if ( ( ( 0 <= i) && (i <= 10)) && ( ( 0 <= i) && (i <= 10)) )
para resolver su problema.
Mi recomendación será envolver esa lógica en una función.
int isInRange(int x, int lower, int upper) { return (lower <= x && x <= upper); }
y use
if ( isInRange(i, 0, 10) && isInRange(j, 0, 10) )
Creo que necesita comprender lo que está pasando en su statement a un nivel más profundo.
0<=i
es una expresión booleana, se volverá verdadera o falsa. El resultado de esa expresión se compara con 10.
Entonces terminas con true <= 10
o false <= 10
.
Creo que querías escribir
if ( ( 0 <= i ) && ( i <= 10 ) )
No puedes conectar las cláusulas como lo hiciste.