[C con Clase] Error en If

Steven Davidson srd4121 en njit.edu
Lun Mayo 25 19:37:20 CEST 2009


Hola Chema,

José María Nevárez wrote:
> Hola a todos,
> tengo el siguiente problema, al escribir las siguientes lineas,
> 
> if ((Tok!=" ") && (Tok!="\t") && (Tok!="  ")  && (Tok!="\r") && (Tok!="\0"))
>      Vaciar(Tok,T_t,NLinea);
> 
> cuando el valor de Tok es = a "\r" no deberia de cumplirse el if,
> sin embargo sigue ejecutando la siguiente instrucción.
> 

Si 'Tok' es una cadena de caracteres declarada así:

char Tok[100];

o como un puntero,

char *Tok;

entonces el problema es que estás comparando arrays. Ten presente que un 
array es la dirección de memoria del primer elemento. Las reglas 
semánticas entre arrays no comparan los elementos de cada uno, sino que 
se comparan las direcciones de memoria.

La solución es usar la función estándar 'strcmp()' declarada en 
<cstring> (o <string.h> si usas C). Esto es,

if( strcmp(Tok," ") && strcmp(Tok,"\t") && strcmp(Tok,"  ") && 
strcmp(Tok,"\r") && strcmp(Tok,"\0") )

De todas maneras, puedes ver que algunas cadenas sólo contienen un solo 
carácter, por lo que podríamos consultar cada carácter. Por ejemplo,

if( Tok[0]!=' ' && Tok[0]!='\t' && strcmp(Tok,"  ") && Tok[0]!='\r' && 
Tok[0]!='\0' )


Espero que esto aclare la duda.

Steven





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