[C con Clase] De vueltas con if

Programante programante en gmail.com
Mie Ago 13 13:38:08 CEST 2008


Ya han contestado al problema principal, pero me gustaría aclarar esta 
duda que presentas:
>
> //Cuando lo ejecuto, escriba "platano" o manzana, siempre me dice muy 
> mal. Si en vez de if (palabra==platano) pongo if (palabra=platano) 
> con un sólo igual, me dice que bravo, escriba lo que escriba.
Los dos iguales == son el operador de comparación. Devuelve un resultado 
verdadero o falso de la comparación de dos variables (aunque en el caso 
de cadenas de caracteres, lo que te interesa es comparar sus contenidos, 
no los punteros!).
En cambio un solo igual = es el operador de asignación. palabra = 
platano asigna a palabra el valor de la variable platano. Y devuelve ese 
mismo valor. Si miramos ese valor en un if, C intentará convertirlo a un 
valor booleano, y entrará en el if si platano es distinto de 0.

Por ejemplo un programa como este:

int a = 5;

if (a = 3) {
 cout << "A vale 3" << endl;
} else {
 cout << "A no vale 3" << endl;
}
cout <<  "El valor de a es " << a << endl;

Entrará siempre en la primera rama, ya que estás asignando a a el valor 
3. Como este valor es distinto de 0, entra. Además al haber modificado 
el valor de a, afectará al resto del programa (en este caso donde 
mostramos al final el valor de a).
Para intentar evitar estos problemas hay quien prefiere hacer 
comparaciones del tipo if (3 == a) puesto que una expresión if (3 = a) 
es inválida y daría un error.





Más información sobre la lista de distribución Cconclase