| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
nanigu
Registrado: 11 Sep 2007 Mensajes: 5
| Publicado: 11/09/2007 11:14 am | | | Título: Ayuda con mi primer programa |
| bueno hace 2 dias q empese a leer el curso de C y ahora quiero hacermi programa  no tengo experiencia previa en programacion, es la primera vez que lo intento la idea de este programa es introducir un nombre de un personaje de un videojuego y que nos diga a que persona pertenese. la idea mas adelante es implementar un sistema de ficheros que permita introducir nuevos personajes y usuarios. la idea basica de mi programa es esta:
| Código: |
#include <iostream.h> #include <stdlib.h> #include <stdio.h> #include <string.h>
int main() { char pj[20]; int opcion;
printf( "Bienvenido a: \n\n NANIGU IAO Identificador V1.0 \n\n\n\nIntroduce tu personaje: "); introducir_nombre: fflush ( stdin ); printf:( "Introduce el nombre del personaje a buscar usuario:" ); scanf( "%s", pj); swich ( pj ); { case nanigu: printf( "Sos Martín\n" ); case lambri: printf( "Sos Julian\n" ); case zehashir: printf( "Sos Maia\n" ); case umbra: printf( "Sos Gonza\n" ); default: printf( "El personaje %s no se encunentra registrado en nuestra base de datos\n", pj ); }
printf( "\n Para introducir el nombre de otro personaje presione 1, para salir presiones 0:"); scan( "%i", opcion); swich ( opcion ); { case 1: goto introducir_nombre case 2: goto salir } salir: printf( "Gracias por utilizar este programa \n\n\n\n" ); system("PAUSE"); return 0; }
|
pero me tira errores el compilador. alguno me puede dar una ayuda? saludos[/code] |
| | Volver arriba | |  | digies
Registrado: 18 Nov 2005 Mensajes: 241 Ubicación: Cono Sur
| Publicado: 11/09/2007 12:58 pm | | | Título: |
| Hola
Tienes varios errores en tu código, te enumero algunos:
1- El valor de la expresión de control o selector de la sentencia de control switch solo admite los tipos int o char, pero no de tipo float, double, string (este último es el que tú intentas usar). 2- Se escribe switch y no swich. 3- Tienes que colocar la sentencia "break;" en cada uno de los case's para que en algún momento finalice el switch. 4- Error en scan( "%i", opcion); es scanf(). con 'f' al final. 5- El "goto salir" deber terminar con punto y coma. Y así para los otros. 6- Si es un programa C y no C++, el header "#include <iostream.h>" no es necesario.
Un consejo: Si recién estás empezando con C/C++ es preferible que no utilices la sentencia de salto "goto", puedes reemplazarla sin inconvenientes utilizando algoritmos alternativos. El "goto" impide que tu código sea estructurado y se hace menos legible, y a la larga te traerá confusión. Esto lo notarás cuando tengas que hacer programas más grandes. Usa "goto" solamente en casos excepcionales.
Un saludo |
| | Volver arriba | |  | rir3760

Registrado: 01 Oct 2004 Mensajes: 3657 Ubicación: Mexico
| Publicado: 11/09/2007 1:00 pm | | | Título: |
| Lo primero que debes hacer es decidirte por un solo lenguaje: el curso de este sitio es un curso sobre C mientras que tu programa utiliza el archivo de inclusion <iostream.h> propio de C++.
Un saludo _________________ The capacity to learn is a gift; The ability to learn is a skill; The willingness to learn is a choice. -- Rebec of Ginaz |
| | Volver arriba | |  | | cheroky
Registrado: 22 Sep 2005 Mensajes: 1372 Ubicación: En ecx esperando un call
| Publicado: 11/09/2007 1:07 pm | | | Título: |
| No he llegado a compilar tu programa, pero se advierten varios errores evidentes, algunos de estos son:
La inclusion del archivo de cabecera iostream.h, antiguo header de C++. El uso de fflush no es valido para STDIN en todos los compiladores, hay varias discusiones al respecto en los foros.
Otro error:
| Código: | swich ( pj ); /* */ |
Sin mencionar el sintactico ';' la estrucutra switch procesa valores enteros, le pasas un puntero, el referido a pj[20] Viendo los cases se intuye que deseas comparar cadenas, busca ejemplos con strcmp.
Otro error esta en el scanf que utilizas antes del ultimo switch, a este hay que pasarle la direccion de la variable opcion
| Código: | scanf("%i",&opcion); |
Y por ultimo, evita el uso de goto, mas aun cuando todavia acabas de empezar.
S2. _________________ - Explícito es mejor que implícito. - Simple es mejor que complejo. - Complejo es mejor que complicado. - Plano es mejor que anidado. - Ralo es mejor que denso. |
| | Volver arriba | |  | nanigu
Registrado: 11 Sep 2007 Mensajes: 5
| Publicado: 11/09/2007 1:33 pm | | | Título: |
| gracias muchachos! ya arregla casi todo.
me falta lo del switch y los cases. aver si entiendo mas o menos. el switch necesita valores enteros para funcionas, asi q tengo q usar punteros en lugar de las cadenas, y tengo q usar el strcmp para comprar las cadenas, o sea q tambien tengo q definir una cadena por "nanigu" otra por "lambri" otra para "zehashir" y otra para "umbra"? voy a probar aver si esto me funciona xD |
| | Volver arriba | |  | nanigu
Registrado: 11 Sep 2007 Mensajes: 5
| Publicado: 11/09/2007 1:49 pm | | | Título: sigo sin entender =( |
| | Código: | #include <stdlib.h> #include <stdio.h> #include <string.h>
int main() { char pj[20]; int opcion; char nanigu[] = { 'n', 'a', 'n', 'g', 'u', '\0' }
printf( "Bienvenido a: \n\n NANIGU IAO Identificador V1.0 \n\n\n\nIntroduce tu personaje: "); introducir_nombre: fflush ( stdin ); printf:( "Introduce el nombre del personaje a buscar usuario:" ); scanf( "%s", pj); int *pj *pj = pj
switch ( *pj ); { case ( strcmp (nanigu,pj)); printf( "Sos Martín\n" ); break; default: printf( "El personaje %s no se encunentra registrado en nuestra base de datos\n", pj ); break; }
printf( "\n Para introducir el nombre de otro personaje presione 1, para salir presiones 0:"); scanf( "%i", &opcion); swich ( opcion ); { case 1: goto introducir_nombre; case 2: goto salir; } salir: printf( "Gracias por utilizar este programa \n\n\n\n" ); system("PAUSE"); return 0; }
|
|
| | Volver arriba | |  | | tonilope
Registrado: 16 Oct 2005 Mensajes: 249
| Publicado: 11/09/2007 4:04 pm | | | Título: |
| Mira así:
| Código: | #include <stdio.h> #include <stdlib.h> #include <string.h>
int main() { char pj[50], nanigu[] = "nangu", opcion, basura; printf( "NANIGU IAO Identificador V1.0\n\n"); do { printf( "Introduce el nombre del personaje a buscar usuario: " ); fgets(pj, 50, stdin); pj[strlen(pj)-1]=0; if( !strcmp(nanigu, pj) ) printf( "Sos Martín\n" ); else printf( "El personaje %s no se encuentra registrado en nuestra base de datos\n", pj ); printf( "\n Para introducir el nombre de otro personaje presione '1', para salir presione '0':"); opcion=getchar(); while((basura=getchar())!='\n'); //fflush(stdin) no está bien utilizado }while(opcion=='1'); printf( "\n\nGracias por utilizar este programa \n\n" ); system("PAUSE"); return 0; }
|
PASA DEL GOTO.
Salu2  _________________ Be (void *) my friend |
| | Volver arriba | |  | digies
Registrado: 18 Nov 2005 Mensajes: 241 Ubicación: Cono Sur
| Publicado: 11/09/2007 4:07 pm | | | Título: |
| Sigues cometiendo el mismo error con la sentencia switch, debes sacarle el ";" al inicio de este.
Yo reemplazaría el switch por un if else if. Con esto no quiero decir que con un switch no se pueda hacer, pero ten en cuenta el comentario que hice anteriormente hacerca de las expresiones que esta maneja.
| Código: | #include <stdlib.h> #include <stdio.h> #include <string.h>
#define ACENT_i '\xA1'
int main(void) { char pj[20]; int opcion; printf("Bienvenido a: \n\n NANIGU IAO Identificador V1.0\n\n"); introducir_nombre: fflush (stdin); printf("Introduce el nombre del personaje a buscar: " ); scanf( "%s", pj); if(strcmp(pj, "nanigu")==0) printf("Sos Mart\xA1n\n"); else if(strcmp(pj, "lambri")==0) printf("Sos Julian\n"); else if(strcmp(pj, "zehashir")==0) printf("Sos Mar%ca\n", ACENT_i); else if(strcmp(pj, "umbra")==0) printf("Sos Gonza\n"); else printf("\nEl personaje %s no se encunentra registrado en nuestra base de datos\n", pj); printf("\nPara introducir el nombre de otro personaje presione 1, para salir presiones 0: \n"); scanf("%i", &opcion); switch(opcion) { case 1: goto introducir_nombre; break; default: /* Si presionaste 0 o cualquier tecla <> 1 */ goto salir; } salir: printf("Gracias por utilizar este programa \n\n\n\n"); system("pause"); return 0; }
|
strcmp(s1, s2) Compara la cadena apuntada por s1 con la cadena apuntada por s2. La función retorna un número >0, ==0, o <0, apropiadamente según la cadena apuntada por s1 es mayor, igual, o menor que la cadena apuntada por s2.
Un saludo |
| | Volver arriba | |  | nanigu
Registrado: 11 Sep 2007 Mensajes: 5
| Publicado: 11/09/2007 4:32 pm | | | Título: |
| | gracias chicos ahora me queda mas claro =) |
| | Volver arriba | |  | | digies
Registrado: 18 Nov 2005 Mensajes: 241 Ubicación: Cono Sur
| Publicado: 11/09/2007 6:04 pm | | | Título: |
| Otra aportación, casi idéntico al de tonilope:
| Código: | #include <stdlib.h> #include <stdio.h> #include <string.h>
#define ACENT_i '\xA1'
int main(void) { char pj[20], opcion, basura; printf("Bienvenido a: \n\n NANIGU IAO Identificador V1.0\n\n"); do { printf("Introduce el nombre del personaje a buscar: " ); fgets(pj, 50, stdin); pj[strlen(pj)-1]=0; if(strcmp(pj, "nanigu")==0) printf("Sos Mart\xA1n\n"); else if(strcmp(pj, "lambri")==0) printf("Sos Julian\n"); else if(strcmp(pj, "zehashir")==0) printf("Sos Mar%ca\n", ACENT_i); else if(strcmp(pj, "umbra")==0) printf("Sos Gonza\n"); else printf("\nEl personaje %s no se encunentra registrado en nuestra base de datos\n", pj); printf("\nPara introducir el nombre de otro personaje presione 1, para salir presiones 0: \n"); opcion=getchar(); while((basura=getchar())!=EOF && basura!='\n') /* fflush(stdin) no está bien utilizado */ ; } while(opcion=='1'); printf("Gracias por utilizar este programa \n\n\n\n"); system("pause"); return 0; }
|
Ahora pregunto: ¿Qué declaración es más conveniente:
Esta:
| Código: | while((basura=getchar())!='\n') ;
|
o esta:
| Código: | while((basura=getchar())!=EOF && basura!='\n') ;
|
Un saludo |
| | Volver arriba | |  | rir3760

Registrado: 01 Oct 2004 Mensajes: 3657 Ubicación: Mexico
| Publicado: 11/09/2007 8:38 pm | | | Título: |
| Es mejor la segunda debido a que getchar retorna EOF en caso de error o fin de archivo. Si se quiere verificar esto una opcion es:
| Código: | while ((ch = getchar()) != EOF && ch != '\n') ; if (ferror(stdin)){
/* manejo de error */ }
/* ... etc ... */ |
Un saludo _________________ The capacity to learn is a gift; The ability to learn is a skill; The willingness to learn is a choice. -- Rebec of Ginaz |
| | Volver arriba | |  | | |
| No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|
| |