Duda programacion con C

Quisiera saber una duda un poco tonta pero que me corroe por dentro, es sobre una comparación. Supongamos que tengo una cadena de struct con nombre,apellido, edad y dni de una persona. y me dicen que dado el nombre por teclado, muestre dni, a priori facil, mi planteamiento ha sido, leer el nombre (gets) y a continuacion guardarlo en una variable nom. despues con un for, desde i hasta N donde N es la longitud de la cadena, comparar el nombre que tengo en la variable con cada uno de los nombres de la estructura
for (i=0; i=N; i++)
{
if (nom=datos[i].nombre)---> La duda es, puedo comparar caracteres o solo se pueden comparar numeros?
{
y seguir aqui
}

}


saludos y graias
dos cosas:
Si, puedes comparar caracteres, pero.... NO PUEDES COMPARAR arrays/vectores/cadenas de caracteres. Para eso hay una función llamada strcmp (busca info sobre ella). En c++ esta, en C a secas no se
A ver...

Puedes comparar cualquier cosa que tu quieras, la cuestión es como se hace

Según has puesto el if, estás haciendo una asignación (ten cuidado). Ademas de que para lo que tu quieres creo está mal planteado, ya que para comparar 2 cadenas de forma tradicional debes recorrerlas. Eso estaria bien si nom y nombre fuesen de tipo string pero como es c está mal.

Si quieres comprarar 2 cadenas lo más fácil es usar la funcion strcmp

aquí tienes un ejemplo para usarla http://www.conclase.net/c/librerias/fun ... fun=strcmp

básicamente seria cambiar la condicion del if por: strcmp(nom,datos[i].nombre)==0

salu2
Tacramir escribió:Quisiera saber una duda un poco tonta pero que me corroe por dentro, es sobre una comparación. Supongamos que tengo una cadena de struct con nombre,apellido, edad y dni de una persona. y me dicen que dado el nombre por teclado, muestre dni, a priori facil, mi planteamiento ha sido, leer el nombre (gets) y a continuacion guardarlo en una variable nom. despues con un for, desde i hasta N donde N es la longitud de la cadena, comparar el nombre que tengo en la variable con cada uno de los nombres de la estructura
for (i=0; i=N; i++)
{
if (nom=datos.nombre)---> La duda es, puedo comparar caracteres o solo se pueden comparar numeros?
{
y seguir aqui
}

}


saludos y graias


Ten cuidado también porque = != ==.
Si, ya me di cuenta del doble igual, que lo tenia mal, gracias por las respuestas. Ya he estado leyendo sobre el strcmp. muchas gracias.
En C a secas no puedes comparar strings. Tienes que usar strcmp. Además, la comparación es con ==, no con =. Si no quieres usar esta función tendrías que comprobar char a char (engorro).

Creo que sin embargo en C++ sí que se pueden comparar cadenas AnsiString entre sí mediante un operador ==.

Y esto debería ir en PC, que para algo está.
Yo también veo el algoritmo un poco..... ineficiente.
Puedes hacer la búsqueda con un do while y que acabe cuando encuentre el nombre. Gasta menos tiempo de procesador que un for que recorra una lista entera.
aVeFeNiXxX escribió:En C a secas no puedes comparar strings. Tienes que usar strcmp. Además, la comparación es con ==, no con =. Si no quieres usar esta función tendrías que comprobar char a char (engorro).

Creo que sin embargo en C++ sí que se pueden comparar cadenas AnsiString entre sí mediante un operador ==.

Y esto debería ir en PC, que para algo está.

Dimelo a mi, que en clase cuando empezamos con los vectores los comparábamos así. Casi matamos a la profe cuando nos enseñó el strcmp XD
pepone1234 escribió:Yo también veo el algoritmo un poco..... ineficiente.
Puedes hacer la búsqueda con un do while y que acabe cuando encuentre el nombre. Gasta menos tiempo de procesador que un for que recorra una lista entera.

No me extraña, tengo un don especial para hacer codigos mas largos de lo normal, no habia práctica en la que la profesora no me dijera que el codigo era ineficiente y que intentara acortarlo
8 respuestas