[C con Clase] ayuda en progrma

Ezequiel Hernan Di Giorgi hernan.digiorgi en gmail.com
Mie Feb 29 12:02:26 CET 2012


El 28 de febrero de 2012 22:50, jose omar leon luna <gyakuza en gmail.com>escribió:

> podrian ayudarme tengo el siguiente codigo y me piden que lo compile y
> encientre los errores, corrija y describa como es que funciona pero no le
> encuentro como sobre todo cuando guarda los datos en el registro c del
> arreglo y en donde pide buscar al perro por la clave, podrian checarlo
> gracias, mi correo es gyakuza en gmail.com po si no sale con el comentario:
>
> #include <stdio.h>
>
> #include <stdlib.h>
>
> #include <conio.h>
>
> main(){
>
> /* Declaración del arreglo de tipo estructura perro */
>
> struct perro{
>
> char fecha[10];
>
> char raza[30];
>
> char color[50];
>
> char nombre[30];
>
> int edad;
>
> float peso;
>
> } perros[100];
>
> int c=0, op, clave;
>
> do{ /* Inicio del ciclo que imprime el menú*/
>
> printf( "\n----------------------------------------\n");
>
> printf( "\nRefugio para perros -Ladrido Feliz- \n");
>
> printf( "\n----------------------------------------\n");
>
> printf( "1) Registrar un perro \n");
>
> printf( "2) Buscar un perro \n");
>
> printf( "3) Salir \n");
>
> printf( "Elige una opci%cn:",162 );
>
> scanf("%d",&op);
>
> switch (op){
>
> case 1: /*Opción Registrar perro */
>
> printf( "\n------------------------------\n");
>
> if(c>=100) /* Verifica si hay espacio */
>
> printf("El refugio esta lleno\n");
>
> else{
>
> /*Si hay espacio pide los datos del perro y los guarda en el registro c
> del arreglo */
>
> printf( "Ingresa los datos del perro:");
>
> printf( "Clave:%.3d\n", &c);
>
> printf( "fecha de ingreso[dd/mm/aa]: ");
>
> scanf( "%s", perros[c].fecha);
>
> printf( "nombre: ");
>
> fflush(stdin);
>
> gets( perros[c].nombre);
>
> printf( "color: ");
>
> gets( perros[c].color);
>
> printf( "raza: ");
>
> gets( perros[c].raza);
>
> printf( "edad: ");
>
> scanf("%d" ,&perros[c].edad);
>
> printf( "peso: ");
>
> scanf("%f" ,&perros[c].peso);
>
> c++;
>
> }
>
> break;
>
> case 2: /* Opción buscar perro */
>
> printf( "\n-------------------------------\n");
>
> printf( "Clave: ");
>
> scanf("%d",&clave);
>
> /* verifica que la clave sea válida */
>
> while(clave>=100 || clave <0){
>
> /* Imprime los datos del perro correspondiente a la clave */
>
> printf( "nombre:%s\n",perros[clave].nombre);
>
> printf( "fecha de ingreso: %s\n", perros[clave].fecha);
>
> printf( "color: %s\n", perros[clave].color);
>
> printf( "raza: %s\n", perros[clave].raza);
>
> printf( "edad: %d a%cos\n", perros[clave].edad,164);
>
> printf( "peso: %.2f kilos\n", perros[clave].peso);
>
> }
>
> break;
>
> case 3: /* Caso salir, no hace nada */
>
> break;
>
> default: /* Caso opción inválida */
>
> printf( "Opcion no valida\n");
>
> }
>
> }while (op!=3); /* El ciclo do-while se repite mientras la opción no sea
> salir (3) */
>
> }
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>


Hola amigo, CREO que arregle tu codigo, pero ahi esta... a mi no me da
errores, lo compile con el gcc, agrege un perrito y lo vi. Si sigue sin
funcionar avisame.
Ahaa, algo bonito seria que escribas con identacion, osea que no sea todo
en la misma linea. Yo identee a mano  las partes que modifique. FIjate los
comentarios. BYE.


#include <stdio.h>

#include <stdlib.h>

//Existiendo tantas librerias portables por que esta!! solo funciona en
windows,
//Y lo mejor es q no la usas.
//#include <conio.h>

main(){

/* Declaración del arreglo de tipo estructura perro */

//Recomiendo declarar los struct fuera del main, para que puedan ser vistos
por otras funciones
struct perro{

char fecha[10];

char raza[30];

char color[50];

char nombre[30];

int edad;

float peso;

} perros[100];

int c=0, op, clave;

do{ /* Inicio del ciclo que imprime el menú*/

printf( "\n----------------------------------------\n");

printf( "\nRefugio para perros -Ladrido Feliz- \n");

printf( "\n----------------------------------------\n");

printf( "1) Registrar un perro \n");

printf( "2) Buscar un perro \n");

printf( "3) Salir \n");

printf( "Elige una opci%cn:",162 );

scanf("%d",&op);


switch (op){

  case 1: /*Opción Registrar perro */

    printf( "\n------------------------------\n");

    if(c>=100) /* Verifica si hay espacio */
      printf("El refugio esta lleno\n");

    else{

      /*Si hay espacio pide los datos del perro y los guarda en el registro
c del arreglo */

      printf( "Ingresa los datos del perro:");

      //%d espera tipo int y no int*, lo que quiere decir es q le estas
mandando un puntero donde no va
      printf( "Clave:%.3d\n", /*&c*/c);

      printf( "fecha de ingreso[dd/mm/aa]: ");

      scanf( "%s", perros[c].fecha); //Usa este para mi gusto (no acepta
espacios, eso si jejeje)

      printf( "nombre: ");

      fflush(stdin);//Quieres limpiar el buffer? pero si luego...

      gets( perros[c].nombre); //Capturas lo que hay en el, osea nada.

      printf( "color: ");

      gets( perros[c].color);

      printf( "raza: ");

      gets( perros[c].raza);

      printf( "edad: ");

      scanf("%d" ,&perros[c].edad);

      printf( "peso: ");

      scanf("%f" ,&perros[c].peso);

      c++;

    }

break;

  case 2: /* Opción buscar perro */

    printf( "\n-------------------------------\n");

    printf( "Clave: ");

    scanf("%d",&clave);

    /* verifica que la clave sea válida */

    //La condicion es terrible, primero que es un while, lo que ara es
iniciar un ciclo,
    //osea MIENTRAS la condicion se repita, hace tal cosa. Bueno... pero tu
quieres mostrar
    //un solo perro y no varios.
    //Segundo mientras sea mayor a 100? no tienes mayores a cien ni tampoco
menores a 0 :)
    //while(clave>=100 || clave <0){

    //Ademas te puede dar fallo de segmentacion si accedes a perros[100],
ya que puedes acceder
    //desde perror[0] a perros [99]. Yo cuando aprendi estas cosas lo hice
con java.
    //Te recomiendo java por su simpleza, y por que "cada error te avisa",
no es tan asi en c
    if (clave<100 || clave>=0) {
      /* Imprime los datos del perro correspondiente a la clave */

      printf( "nombre:%s\n",perros[clave].nombre);

      printf( "fecha de ingreso: %s\n", perros[clave].fecha);

      printf( "color: %s\n", perros[clave].color);

      printf( "raza: %s\n", perros[clave].raza);

      printf( "edad: %d a%cos\n", perros[clave].edad,164);

      printf( "peso: %.2f kilos\n", perros[clave].peso);

    }

break;

case 3: /* Caso salir, no hace nada */

break;

default: /* Caso opción inválida */

printf( "Opcion no valida\n");

}

}while (op!=3); /* El ciclo do-while se repite mientras la opción no sea
salir (3) */

}
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20120229/059a9016/attachment.html>


Más información sobre la lista de distribución Cconclase