/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Ayuda con mi primer programa

 
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
nanigu



Registrado: 11 Sep 2007
Mensajes: 5

MensajePublicado: 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 Razz
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

MensajePublicado: 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

MensajePublicado: 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

MensajePublicado: 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

MensajePublicado: 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

MensajePublicado: 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

MensajePublicado: 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 Wink
_________________
Be (void *) my friend
Volver arriba
digies



Registrado: 18 Nov 2005
Mensajes: 241
Ubicación: Cono Sur

MensajePublicado: 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

MensajePublicado: 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

MensajePublicado: 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

MensajePublicado: 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
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com