Autor
|
Tema: Consulta sobre programa C (Leído 2,527 veces)
|
GonzaJava
Desconectado
Mensajes: 9
|
Hola, hice un programa en c y tendria que andar perfecto ya que no me salto error ni nada, cuando ejecuto el programa me sale, por ejemplo: "Ingrese periodo" lo pongo, despues me dice "Ingrese pintor", lo ingreso y ahi me sale "Galeria ..." el tema es que ahi tendria que terminar el programa pero me aparece "No hay obras en este periodo" que eso esta a lo ultimo, en fin ahi les paso el codigo para ver si pueden ayudarme.
#include<stdio.h> #include<string.h>
int main() { char periodo[50]; char pintor[50]; char nacion[50]; printf("Ingrese periodo: "); scanf("%s", periodo); if ((strcmp (periodo, "Prehistorico")==0) || (strcmp(periodo, "egipcio")==0)){
printf("Galeria 1 \n");
} else if ((strcmp(periodo, "renacimiento")==0)){ {
printf("Ingrese nombre del pintor: "); scanf("%s", pintor); } if ((strcmp (pintor, "Leonardo")==0) || (strcmp(pintor, "Michelangelo")==0)) { printf ("Galeria 2 \n"); } else if (strcmp(pintor, "Rafael")==0){
printf ("Galeria 3"); } else if ((strcmp (pintor, "Tiziano")==0) || (strcmp(pintor, "Boticelli")==0)){
printf("Galeria 4"); } else if ((strcmp (pintor, "Greco")==0) || (strcmp(pintor, "Tintoretto")==0)){
printf("Galeria 5a"); } else if (strcmp(pintor, "Bellini")==0){
printf("Galeria 5b"); } else { printf("No hay obras de este pintor \n"); } }
if ((strcmp (periodo, "barroco")==0)){ { printf("Ingrese nacion: "); scanf("%s", nacion); } if ((strcmp (nacion, "Espana")==0)){ printf("Galeria 6, Velzaquez y Murillo"); } else if ((strcmp(nacion, "Italia")==0)){ printf("Galeria 7, Caravaggio"); } else { printf("No hay obras de esta nacionalidad"); } } else if ((strcmp(periodo, "expresionismo")==0)){ printf("Galeria 8, Kandiski"); } if ((strcmp(periodo, "impresionismo")==0)){ printf("Galeria 8, Van Gogh"); } else if ((strcmp(periodo, "fauvismo")==0)){ printf("Galeria 8, Manguin"); } if ((strcmp(periodo, "cubismo")==0)){ printf("Galeria 9, Picasso"); } else if ((strcmp(periodo, "surrealismo")==0)){ { printf("Ingrese pintor: "); scanf("%s", pintor); } if ((strcmp(pintor, "Dali")==0)){ printf("Galeria 10"); } else if ((strcmp(pintor, "Miro")==0)){ printf("Galeria 11"); } else{ printf("No hay obras de este pintor"); } } else if ((strcmp(periodo, "informalismo")==0) || (strcmp(periodo, "hiperralismo")==0)){ printf("Galeria 12"); } else { printf("No hay obras en este periodo"); } return 0;
}
|
|
|
En línea
|
|
|
|
Yuki
Desconectado
Mensajes: 80
El error es una muestra de la incompetencia.
|
¿Otra vez? Antes que nada, recordá poner tus códigos bajo la etiqueta "CODE". Lamentablemente no te puedo ayudar ya que no entiendo donde empiezan y donde terminan los corchetes, tu código tiene que mejorar drasticamente. O lo ofucaste apropósito, que se yo. Solo pude encontrar una irregular doble apertura de corchetes. int main() { char periodo[50]; char pintor[50]; char nacion[50]; printf("Ingrese periodo: "); scanf("%s", periodo); if ((strcmp (periodo, "Prehistorico")==0) || (strcmp(periodo, "egipcio")==0)){ printf("Galeria 1 \n"); } else if ((strcmp(periodo, "renacimiento")==0)){ { printf("Ingrese nombre del pintor: "); scanf("%s", pintor); } if ((strcmp (pintor, "Leonardo")==0) || (strcmp(pintor, "Michelangelo")==0)) { printf ("Galeria 2 \n"); } else if (strcmp(pintor, "Rafael")==0){ printf ("Galeria 3"); } else if ((strcmp (pintor, "Tiziano")==0) || (strcmp(pintor, "Boticelli")==0)){ printf("Galeria 4"); } else if ((strcmp (pintor, "Greco")==0) || (strcmp(pintor, "Tintoretto")==0)){ printf("Galeria 5a"); } else if (strcmp(pintor, "Bellini")==0){ printf("Galeria 5b"); } else { printf("No hay obras de este pintor \n"); } } if ((strcmp (periodo, "barroco")==0)){ { printf("Ingrese nacion: "); scanf("%s", nacion); } if ((strcmp (nacion, "Espana")==0)){ printf("Galeria 6, Velzaquez y Murillo"); } else if ((strcmp(nacion, "Italia")==0)){ printf("Galeria 7, Caravaggio"); } else { printf("No hay obras de esta nacionalidad"); } } else if ((strcmp(periodo, "expresionismo")==0)){ printf("Galeria 8, Kandiski"); } if ((strcmp(periodo, "impresionismo")==0)){ printf("Galeria 8, Van Gogh"); } else if ((strcmp(periodo, "fauvismo")==0)){ printf("Galeria 8, Manguin"); } if ((strcmp(periodo, "cubismo")==0)){ printf("Galeria 9, Picasso"); } /* DOBLE "{" en las siguientes líneas. <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/ else if ((strcmp(periodo, "surrealismo")==0)){ { printf("Ingrese pintor: "); scanf("%s", pintor); } if ((strcmp(pintor, "Dali")==0)){ printf("Galeria 10"); } else if ((strcmp(pintor, "Miro")==0)){ printf("Galeria 11"); } else{ printf("No hay obras de este pintor"); } } else if ((strcmp(periodo, "informalismo")==0) || (strcmp(periodo, "hiperralismo")==0)){ printf("Galeria 12"); } else { printf("No hay obras en este periodo"); } return 0; }
|
|
|
En línea
|
|
|
|
Kenji-chan
Desconectado
Mensajes: 104
|
yo he encontrado mas de una int main() { char periodo[50]; char pintor[50]; char nacion[50]; if ((strcmp (periodo , "Prehistorico")==0) || (strcmp(periodo , "egipcio")==0)){ } else if ((strcmp(periodo , "renacimiento")==0)){ //{ <-- aqui printf("Ingrese nombre del pintor: "); } if ((strcmp (pintor , "Leonardo")==0) || (strcmp(pintor , "Michelangelo")==0)){ } else if (strcmp(pintor , "Rafael")==0){ } else if ((strcmp (pintor , "Tiziano")==0) || (strcmp(pintor , "Boticelli")==0)){ } else if ((strcmp (pintor , "Greco")==0) || (strcmp(pintor , "Tintoretto")==0)){printf("Galeria 5a"); } else if (strcmp(pintor , "Bellini")==0){ } else { printf("No hay obras de este pintor \n"); } } if ((strcmp (periodo , "barroco")==0)){ //{ <-- aqui } if ((strcmp (nacion , "Espana")==0)){ printf("Galeria 6, Velzaquez y Murillo"); } else if ((strcmp(nacion , "Italia")==0)){ printf("Galeria 7, Caravaggio"); } else { printf("No hay obras de esta nacionalidad"); } //} <-- aqui else if ((strcmp(periodo , "expresionismo")==0)){ printf("Galeria 8, Kandiski"); } if ((strcmp(periodo , "impresionismo")==0)){ printf("Galeria 8, Van Gogh"); } else if ((strcmp(periodo , "fauvismo")==0)){ } if ((strcmp(periodo , "cubismo")==0)){ } else if ((strcmp(periodo , "surrealismo")==0)){ //{ <-- aqui } if ((strcmp(pintor , "Dali")==0)){ } else if ((strcmp(pintor , "Miro")==0)){ } else{ printf("No hay obras de este pintor"); } //} <-- aqui else if ((strcmp(periodo , "informalismo")==0) || (strcmp(periodo , "hiperralismo")==0)){ } else { printf("No hay obras en este periodo"); } return 0; }
te has echo un lio con los corchetes
|
|
|
En línea
|
|
|
|
MAFUS
Desconectado
Mensajes: 1.603
|
Es 'muy imporante' tabular bien un código, lenguajes como Python lo han hecho norma, así se puede ver bien la estructura del programa. En cambio cuando se hace mal es fácil perder qué cosa va con qué cosa y así es imposible mantener la estructura. Como podrás ver en el código arreglado cuándo entras en un periodo y preguntas por un pintor, el código debe seguir en ese if, no hay que cerrarlo, pues todo lo referente a esos pintores pertenece a ese periodo. Una vez terminado el periodo se sigue el else if para los periodos posteriores. De todas formas esto es una práctica un poco mala, llamada spaghetti code, porque se extiende de seguido de principio a fin, haciéndolo difícil de seguir y mantener. #include<stdio.h> #include<string.h> int main() { char periodo[50]; char pintor[50]; char nacion[50]; if ((strcmp (periodo , "Prehistorico")==0) || (strcmp(periodo , "egipcio")==0)) { } else if (strcmp(periodo , "renacimiento")==0) { printf("Ingrese nombre del pintor: "); if ((strcmp (pintor , "Leonardo")==0) || (strcmp(pintor , "Michelangelo")==0)) { } else if (strcmp(pintor , "Rafael")==0) { } else if ((strcmp (pintor , "Tiziano")==0) || (strcmp(pintor , "Boticelli")==0)) { } else if ((strcmp (pintor , "Greco")==0) || (strcmp(pintor , "Tintoretto")==0)) { } else if (strcmp(pintor , "Bellini")==0) { } else { printf("No hay obras de este pintor \n"); } } else if (strcmp(periodo , "barroco")==0) { if (strcmp (nacion , "Espana")==0) { printf("Galeria 6, Velzaquez y Murillo"); } else if (strcmp(nacion , "Italia")==0) { printf("Galeria 7, Caravaggio"); } else { printf("No hay obras de esta nacionalidad"); } } else if (strcmp(periodo , "expresionismo")==0) { printf("Galeria 8, Kandiski"); } else if (strcmp(periodo , "impresionismo")==0) { printf("Galeria 8, Van Gogh"); } else if (strcmp(periodo , "fauvismo")==0) { } else if (strcmp(periodo , "cubismo")==0) { } else if (strcmp(periodo , "surrealismo")==0) { if (strcmp(pintor , "Dali")==0) { } else if (strcmp(pintor , "Miro")==0){ } else{ printf("No hay obras de este pintor"); } } else if ((strcmp(periodo , "informalismo")==0) || (strcmp(periodo , "hiperralismo")==0)) { } else { printf("No hay obras en este periodo"); } return 0; }
|
|
|
En línea
|
|
|
|
Serapis
|
Cuando usas más de 3-4 if..elseif seguidos, debes pensar en una solución algo más 'elegante', que a la par de ganar en claridad, es más fácil de mantener... 0 - De entrada usando un Switch, sería más claro. 1 - Pero mejor aún si usas unos arrays, en uno guardas los 'periodos', y en otro los pintores... 2 - En realidad sería mejor usar una estructura... ...pero vamos con arrays y en un futuro lo mejoras con alguna estructura... Funcion Main Array de strings periodos(0 a x-1) periodos(0) = "Prehistorico" periodos(1) = "Egipcio" periodos(2) = "Renacimiento" periodos(3) = "Barroco" ... etc...
Array de Strings pintores(0 a y-1) pintores(0) = "Leonardo" pintores(1) = "Michelangelo" ... etc... pintores(7) = "Bellini" pintores(8) = "Velázquez" pintores(9) = "Murillo" pintores(10) = "Caravaggio" ... etc... array de strings PintoresPeriodo(0 a x-1) //relaciona los pintores con cada periodo pintoresPeriodo(0) = "-1,1" // no contiene pintores, y la galeria es la 1. pintoresPeriodo(1) = "-1,1" // no contiene pintores, la galeria es la 1. pintoresPeriodo(2) = "0,1,2,3,4,5,6,7" // Leonardo, Michelangelo... y Bellini pertencen al periodo 2 pintoresPeriodo(3) = "8,9,10" // Velázquez, Murillo y Caravaggio, pertencen al periodo 3 ... etc...
Array de enteros galerias(0 a y-1) // relaciona a cada pintor con una galeria. galerias(0) = 2 // Leonardo está en la galeria 2. galerias(1) = 2 // Michelangelo también está en la galeria 2. galerias(2) = 3 // Rafael está en la galeria 3. ... etc...
galerias(7) = 6 // Bellini en la galería 6 (equivalente a la 5b, guardamos números en este array, pero se puede cambiar a array de strings, si es preciso poner 5b... galerias(8) = 7 // Velázquez en galeria 7 galerias(9) = 7 // Murillo " " galerias(10) = 8 // Caravaggio, en la galeria 8 ... ec...
Llamada MostrarOpcionesAlUsuario Fin funcion Ahora la función que realiza todo el trabajo... muestra opciones, deja elegir al usuario, verifica valor correcto y muestra resultados. Funcion MostrarOpcionesAlUsuario String repite entero prd, pnt, gal // periodo, pintor buleano b
Hacer Hacer Llamada imprimirPeriodos prd = PedirPeriodo("Elige un periodo... (teclea el número asociado al periodo)") Repetir mientras ((prd < 0) o (prd >= x)) imprimir "Periodo elegido: " + periodos(prd) Hacer b = llamada ImprimirPintores(prd) Si (b = TRUE) pnt = PedirPintor("Elige un pintor... (teclea el número asociado al pintor)") mostrarAlUsuario("...para el pintor " + pintores(pnt) + " del periodo " + periodos(prd) + " La galería correspondiente es: " + galerias(pnt) sino pnt = 0 // para periodos sin pintores, ya se mostró la galería, no precisa un valor elegido. fin si Repetir mientras ((pnt < 0) o (pnt >= y))
repite = PedirAlUsuario("¿ Desea elegir otra vez (S/N) ?") Repetir mientras repite = "s" o repite ="S" Fin funcion Borra la pantalla y muestra opción de elgir un periódo: Prehistórico = 0 Egipcio = 1 Renacimiento = 2 Barroco = 3 ... Funcion imprimirPeriodos entero k Borrar pantalla bucle para k desde 0 hasta x-1 imprimir periodos(k) + tabulador + " = " + (k) siguiente en bucle fin funcion Imprime la lista de pintores asociada al periodo elegido (que se recibe como parametro). y devuelve un buleano. Si devuelve TRUE, indica que debe localizarse la galería asociada al pintor que se elija. Periodo elegido: Renacimiento Elige un pintor... (teclea el número asociado al pintor) Leonardo = 0 Michelangelo = 1 ... Bellini = 7 buleano = funcion ImprimirPintores(entero periodo) entero k, z array de enteros n()
n = TomarCadaNumeroSeparadoPorUnaComaDe(pintoresPeriodo(periodo) z = ultimoIndiceEnArray(n)
Si (n(0) =>0) Hacer imprimir tabulador + pintores(n(k)) + tabulador + " = " + n(k) k +=1 Repetir mientras (k<=z) Devolver TRUE Sino imprimir "el periodo " + periodos(periodo) + " no tiene pintores conocidos, la galeria es: " + galerias(n(1)) devolver FALSE Fin si fin funcion Como puedes ver, lo hemos resuelto sin un mísero if...elseif... gana en claridad, y si la lista crece o cambia, basta modificar en main, los valores de 'x', 'y' y reasignar en sus respectivos arrays...
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Consulta sobre el programa ADOBE AUDITION
Multimedia
|
tevas
|
1
|
3,507
|
8 Febrero 2009, 02:38 am
por Songoku
|
|
|
consulta sobre existencia de un programa
Software
|
urvreak
|
5
|
2,170
|
28 Febrero 2011, 17:47 pm
por Edu
|
|
|
Consulta sobre programa con mochila
Ingeniería Inversa
|
susond
|
3
|
3,180
|
12 Junio 2014, 12:57 pm
por dongle2bin
|
|
|
[C](Consulta) Pregunta sobre si una característica es de ANSI C (sobre arreglos)
Programación C/C++
|
class_OpenGL
|
4
|
3,956
|
5 Junio 2016, 23:17 pm
por class_OpenGL
|
|
|
Consulta sobre programa.
Programación C/C++
|
onetake
|
0
|
1,586
|
19 Diciembre 2016, 00:55 am
por onetake
|
|