Título: Problema variable j Publicado por: Ander123 en 27 Octubre 2012, 17:48 pm Hola, tengo un problema con este programa, no entiendo bien el funcionamiento de la variable j y como se puede hacer para que algo que esta declarado en otra variable, la variable fin, se pueda usar en el printf de otros nombres, eso no lo entiendo. Si alguien pudiese explicarme el funcionamiento.. Esque me gusta acabar de entender los programas.
#include <stdio.h> #include <string.h> main() { int i, j; char nombres[10][10], otrosNombres[10], fin[]="fin"; printf("\n Escriba 10 nombres: \n"); for (i=0; i<10; i++) scanf("%s", &nombres); for (i=0; i<10; i++) printf("%s ", nombres); do { printf("\n Escriba otro nombre, o \"fin\" para terminar: "); scanf("%s", otrosNombres); for (i=0,j=0; i<10; i++,j++) { if (strcmp(otrosNombres, nombres) == 0) j--; } if (i != j) printf(" Este nombre se encuentra en la lista\n"); else printf(" Este nombre no se encuentra en la lista\n"); } while (strcmp(otrosNombres, fin) != 0); getchar(); } Título: Re: Problema variable j Publicado por: DickGumshoe en 27 Octubre 2012, 18:49 pm Hola.
Antes de responder a tu duda, comentaré algunos errores del programa: Declaras la variable nombres[10][10]. Eso bien. Pero después, en el primer for, pides los nombres, haciendo esto: Código
Eso no es correcto. Para pedir un *char (cadena de caracteres), no se debe poner el & en el scanf, y para meter 10 nombres, uno en cada fila de la "matriz de letras", debes poner Código (para indicar el número del nombre que vas a pedir, es decir, empiezas por la fila 0 (o nombre 0), y vas así hasta el 9). Por otra parte, para pedir cadenas de caracteres, te recomiendo usar gets() o fgets(), ya que son funciones específicas para dicha función, y pueden leer espacios, al contrario que scanf(), que cuando lee uno, para de leer los datos. Código
Dicho esto, respondo a tu duda: Situémonos en el bucle for que está en el do-while. Las variables i y j incrementan en 1 simultáneamente. Si la variable "otrosNombres" contiene la misma información que "nombres" (strcmp compara dos cadenas: devuelve 0 si ambas son iguales, u otro número si son diferentes), a j se le resta 1. Así, al terminar el bucle for, si i y j son iguales, ninguna cadena contenida en "nombres" será idéntica a "otrosNombres", y si su valor es diferente, sí que hay un nombre igual que a cadena "otrosNombres". Un saludo. Título: Re: Problema variable j Publicado por: rir3760 en 27 Octubre 2012, 19:01 pm Solo agregar que no es necesario utilizar dos variables para buscar la cadena en el array, basta con revisar el valor del contador al final del bucle para conocer el resultado:
Código Y para imprimir una literal terminada con '\n' es mejor utilizar la función "puts". Un saludo Título: Re: Problema variable j Publicado por: Ander123 en 27 Octubre 2012, 23:15 pm Pero como se relaciona la parte del for que compara con la variable i?
Título: Re: Problema variable j Publicado por: DickGumshoe en 28 Octubre 2012, 00:26 am ¿Te refieres a esto?:
Código
Si es así, como ya te dije, dentro del bucle for, si las dos variables (i y j) incrementan en 1 simultáneamente, y si las dos cadenas que comparas son iguales, j decrementa, ergo si i != j, significa que hay una cadena en nombres igual idéntica a otrosNombres, y sino, no serán iguales. Un saludo. Título: Re: Problema variable j Publicado por: Ander123 en 28 Octubre 2012, 09:07 am Si pero en el ciclo for donde se inicializa i y j etc no entiendo como se relaciona la variable i con las variables.. con la que se relacione, para posteriormente poder igualar a j.
Título: Re: Problema variable j Publicado por: DickGumshoe en 28 Octubre 2012, 12:57 pm Si pero en el ciclo for donde se inicializa i y j etc no entiendo como se relaciona la variable i con las variables.. con la que se relacione, para posteriormente poder igualar a j. Lo siento, pero no entiendo bien tu pregunta... Tanto i como j empiezan en 0. Si i != j significa "si i es distinto de j". Si son distintos, es que algún nombre coincide, sino, ninguno es igual. |