Autor
|
Tema: comparacion de cadenas (Leído 6,779 veces)
|
m@o_614
Desconectado
Mensajes: 389
|
estoy haciendo este programa que me pide que le ingrese datos a 10 personas cualquiera, me pide nombre,edad y estatura. Pero una vez que se los ingreso me pide que le de un nombre cualquiera y este tiene que buscar que si se encuentre, pero tengo un error porque no me esta respetando el strncmp que le puse para comparar las dos cadenas alguien que me diga donde me estoy equivocando?? #include <stdio.h> #include <stdlib.h> #define MAX_PERSONAS 3 #define NOMBRE 20 #define EDAD 20 #define ESTATURA 2 int main() { int i; char nombre[NOMBRE],buscarNombre[NOMBRE]; int edad[EDAD]; float estatura[ESTATURA]; printf("Dame los datos de 10 persona:\n"); for(i=0;i<MAX_PERSONAS;i++) { printf("Dame el nombre de la persona:\n"); printf("Dame la edad de la persona\n"); printf("Dame la estatura:\n"); scanf("%f",&estatura [i ]); } printf("Dame el nombre de la persona que deseas buscar:\n"); scanf("%s",&buscarNombre [i ]); for(i=0;i<MAX_PERSONAS;i++) { if(strncmp(buscarNombre ,nombre ,NOMBRE )!=0) { printf("Dame la edad de la persona\n"); printf("Dame la estatura:\n"); scanf("%f",&estatura [i ]); } else } return 0; }
de antemano gracias
|
|
|
En línea
|
|
|
|
x64core
Desconectado
Mensajes: 1.908
|
Error: scanf("%s",&buscarNombre[i]); la variable "i" queda con el valor que se incrementa en el bucle for, debes de establecerla en 0 ya que los arrays empiezan de cero o usar otra variable , tambien: return value strncmp: Returns an integral value indicating the relationship between the strings: A zero value indicates that the characters compared in both strings are all equal. A value greater than zero indicates that the first character that does not match has a greater value in str1 than in str2; And a value less than zero indicates the opposite.
if(strncmp(buscarNombre,nombre,NOMBRE) == 0) { found... }
|
|
|
En línea
|
|
|
|
bdoX
Desconectado
Mensajes: 35
|
tienes que tratar los nombres con arreglos bidimencionales, en ves de usar strncmp, usé strcmp, acá de dejo el code, no es la gran cosa, puede mejorarse mucho este codigo pero es para que tengas una idea de como se hace. #include <stdio.h> #include <stdlib.h> #include <string.h> //sirve para llamar a strcmp ó srtncmp #define MAX_PERSONAS 3 #define NOMBRE 20 #define EDAD MAX_PERSONAS #define ESTATURA MAX_PERSONAS int main () { int i; char nombre[MAX_PERSONAS][NOMBRE],buscarNombre[NOMBRE]; int edad[EDAD]; float estatura[ESTATURA]; printf("Dame los datos de 10 persona\n\n"); for(i=0;i<MAX_PERSONAS;i++) { printf("%d) Dame el nombre de la persona: ", (i + 1)); setbuf (stdin , NULL );//limpia el buffer scanf("%[^\n]",nombre [i ]);//almacena hasta los espacios printf("Dame la edad de la persona: "); setbuf (stdin , NULL );//limpia el buffer setbuf (stdin , NULL );//limpia el buffer scanf("%f",&estatura [i ]); } printf("Dame el nombre de la persona que deseas buscar: "); scanf("%s", buscarNombre ); for(i=0;i<MAX_PERSONAS;i++) { if(strcmp(buscarNombre ,nombre [i ]) == 0) { printf ( "%d) El Nombre buscado si existe y es \n", (i + 1) ); printf ( "Nombre: %s\n", nombre [i ] ); printf ( "Edad: %d\n", edad [i ] ); printf ( "Estatura: %0.2f\n", estatura [i ] ); i = (MAX_PERSONAS); } } if ( i == MAX_PERSONAS ) printf ( "El Nombre buscado no existe\n" ); return 0; }
saludos!
|
|
|
En línea
|
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
Hay que tener cuidado con esto: setbuf (stdin , NULL );//limpia el buffer
Ya que no es correcto debido a que la llamada a "setbuf" debe realizarse antes de cualquier llamada a función que procese el stream y no es el caso (debido al bucle). Para evitar problemas lo mejor es leer "stdin" por linea mediante la función "fgets" (o una propia). Un saludo
|
|
|
En línea
|
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly. -- Kernighan & Ritchie, The C programming language
|
|
|
m@o_614
Desconectado
Mensajes: 389
|
Es correcto que los argumentos de strcmp(cadena1,cadena2) tengan el ???? es que me marca un warning:
passing arg 1 of strcmp makes pointer from interger without a cast
|
|
|
En línea
|
|
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
Las expresiones que se pasan como argumentos a la función "strcmp" pueden tener cualquier forma siempre y cuando el tipo del resultado sea "char *".
Si tienes un problema (como parece ser) con una llamada en particular publica el código fuente del programa.
Un saludo
|
|
|
En línea
|
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly. -- Kernighan & Ritchie, The C programming language
|
|
|
m@o_614
Desconectado
Mensajes: 389
|
#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_PERSONAS 2 #define NOMBRE 20 #define EDAD 2 #define ESTATURA 2 int main() { int i; char nombre[NOMBRE][MAX_PERSONAS],nombreBuscado[NOMBRE]; float estatura[MAX_PERSONAS]; int edad[MAX_PERSONAS]; printf("Dame los datos de 10 personas\n\n"); for(i=0;i<MAX_PERSONAS;i++) { printf("Dame el nombre de la persona:\n"); scanf("%s",&nombre [NOMBRE ][i ]); printf("Dame la edad de la persona:\n"); printf("Dame la estatura de la persona:\n"); scanf("%f",&estatura [i ]); } printf("Dame el nombre de la persona que deseas buscar:\n"); scanf("%s",nombreBuscado ); for(i=0;i<MAX_PERSONAS;i++) { if(strcmp(nombreBuscado ,nombre [NOMBRE ][i ])==0) { printf("Los datos de %s son:\n",nombreBuscado ); printf("Estatura: %f\n",estatura [i ]); } else } return 0; }
ya le hice todos los cambios que creí convenientes, la libreria string.h, declarar la variable nombre como matriz n-n. Y aun asi no compila correctamente:(
|
|
|
En línea
|
|
|
|
bdoX
Desconectado
Mensajes: 35
|
Todo parece indicar que no viste bien el codigo que te postié. if(strcmp(nombreBuscado,nombre[NOMBRE][i])==0)
Eso está mal. Como ya te dijieron con anterioridad, strcmp() recibe un char *, no un caracter ni nada por el estilo. if(strcmp(nombreBuscado,nombre[i])==0)
Debe quedar asi, para que puedas recorrer todos los nombres del array bidimencional. saludos!
|
|
« Última modificación: 19 Febrero 2012, 00:54 am por bdoX »
|
En línea
|
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
También se debe cambiar la declaración del array de arrays y ya en eso modificar las macros para que cumplan su función. Por ejemplo: #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_PERSONAS 2 #define LONG_NOMBRE 20 int main(void) { char nombre[MAX_PERSONAS][LONG_NOMBRE]; char nombreBuscado[LONG_NOMBRE]; float estatura[MAX_PERSONAS]; int edad[MAX_PERSONAS]; int i; /* ... */ return 0; }
Un saludo
|
|
|
En línea
|
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly. -- Kernighan & Ritchie, The C programming language
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Comparación de cadenas (string)
Programación Visual Basic
|
el_lichal
|
4
|
2,651
|
17 Noviembre 2005, 18:40 pm
por el_lichal
|
|
|
Comparación de cadenas
« 1 2 »
Programación C/C++
|
kaostias
|
10
|
5,858
|
24 Octubre 2013, 16:05 pm
por kaostias
|
|
|
[Python] Duda con comparacion de cadenas en una lectura de socket
Python
|
Príncipe_Azul
|
2
|
3,305
|
8 Noviembre 2013, 08:39 am
por Príncipe_Azul
|
|
|
Comparación de dos cadenas sin usar ningún tipo de bucle
Programación C/C++
|
geeke
|
2
|
2,128
|
15 Marzo 2015, 20:23 pm
por kutcher
|
|
|
[SOLUCIONADO] Busqueda de comparacion de cadenas con arreglo de estructuras
Programación C/C++
|
dato000
|
7
|
3,822
|
13 Mayo 2015, 20:35 pm
por Blaster
|
|