C/Visual C - Condicion con Cadenas

   
Vista:

Condicion con Cadenas

Publicado por Peter (2 intervenciones) el 27/12/2007 22:20:43
Hola programadores:

estoy ingresando a la programacion C. mi consulta es la siguiente cuando hice una condicion al comparar una variable con cadena salta a la sentencia falsa, mejor les muestro el codigo:

#include <stdio.h>

main()
{
char usu[10];
printf("Ingrese Usuario: "); //usuario ingresa 'peter'
scanf("%s",usu); //guarda la entrada a la variable usu

if(usu=="peter") //compara si lo ingresado x el usuario es igual a 'peter'
printf("Acceso permitido"); //si es verdadero
else
printf("Acceso denegado"); //si es falso

}

he reemplazo tambien por comillas simples pero siempre imprime "Acceso denegado" aunq haya escrito lo correcto("peter")

alguien me puede ayudar pease, ah y disculpen mi ignorancia..

Peter Ccopa.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
información
Otras secciones de LWP con contenido de C/Visual C
- Código fuente de C/Visual C
- Cursos de C/Visual C
- Temas de C/Visual C
- Chat de C/Visual C
información
Códigos de C/Visual C
- Flecha
- Lluvia
- Lista Simple

RE:Condicion con Cadenas

Publicado por fernando.gomez (1604 intervenciones) el 28/12/2007 01:14:15
Jeje, el problema es que cuando haces

if (usu == "peter")

se hace una comparación a nivel de memoria, por eso te evalúa siempre a falso, porque aunque usu contenga los valores "peter", estás comparando contra otra dirección de memoria (la que el compilador genera de forma estática al poner "peter" en la condición). Recordemos que las cadenas de texto son vectores de caracteres, y éstos son eventualmente punteros a memoria.

La forma de hacer eso es comparar letra por letra. Es decir:

if (usu[0] == 'p' && usu[1] == 'e' && usu[2] == 't' && usu[3] == 'e' && usu[4] == 'r')
...

Por supuesto esto sería increíblemente tedioso. Por eso, la función strcmp es lo que hace, y devuelve 0 en caso de que sean iguales, y -1 y 1 si no lo son.

if (!strcmp(usu, "peter"))
...

o también:

if (strcmp(usu, "peter") == 0)
...

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Condicion con Cadenas

Publicado por Peter (2 intervenciones) el 28/12/2007 01:43:11
fernando.gomez te pasaste gracias por la ayuda. aunq tampoco me salia pero era porque no habia importado la libreria para usar el string
#include <string.h>

ok...gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Condicion con Cadenas

Publicado por fernando.gomez (1604 intervenciones) el 28/12/2007 02:09:24
Er... bueno sí, string.h o si estás en C++, <cstring>. Sorry por no mencionarlo :P

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar