como puedo ordenar nombres con edades?

Iniciado por JulianDronger, 27 Febrero 2019, 18:53 PM

0 Miembros y 1 Visitante están viendo este tema.

JulianDronger

No quiero que interpreten como que quiero que hagan una trabajo para mi, solo queria consejo sobre este ejercicio

Tengo este código, lo que busco es ingresar 5 nombres (mínimo) con 5 edad para cada nombre y que ordene los nombres alfabéticamente y me muestre las listas con los nombres y las edades pero el código falla apenas empieza pero si le saco del código a las variables que representan las edades entonces si funciona. Alguna ayuda? Programo en Qt en lenguaje C:

int n;

       printf("Ingrese cantidad de nombres a ingresar: ");
       scanf("%d",&n);

       char  s[n][20],aux[20];
       int   i,j, edad[n];
       float comp;

       for(i=0;i<n;i++)
       {
         printf("Ingrese nombre(es) y edad(es): ");
         scanf("Nombre: %s",s);
         printf("\n");
         scanf("Edad: %d", &edad);
         printf("\n");
       }
       for(i=0;i<n;i++){
           for(j=0;j<n-i;j++){
               comp = strcmp( s[j], s[j+1] );
               if(comp > 0){
                  strcpy(aux,s[j]);
                  strcpy(s[j],s[j+1]);
                  strcpy(s[j+1],aux);
              }
           }
       }
       printf("Los nombres ordenados alfabeticamente son:\n");
       for(i=0;i<n;i++){

          printf("%d.- Nombre: %s",i+1,s);
          printf("\t");
          printf("Edad %d", edad);
          printf("\n");
       }

K-YreX

Antes de nada modifica tu mensaje e inserta tu código entre etiquetas de código GeSHi (encima del cuadro de texto hay un desplegable para elegir el lenguaje, C en este caso), sino es muy difícil de interpretar...

Ahora respecto a tu problema. Tienes algunos errores a la hora de leer variables con <scanf()> y creo que la mejor forma de implementar lo que quieres es usando una <struct>. Ahora te comento un poco cómo funciona porque imagino que no las has usado nunca. Están dirigidas a la programación orientada a objetos (POO) y consiste en almacenar distintas variables dentro de un nuevo tipo de variable que creas.
Imagina una persona que tiene nombre y edad. Para no guardar los datos por ahí sueltos, podemos crear una <struct Persona> y cada objeto/variable de tipo <Persona> tendrá un nombre (char[]) y una edad (int).

#define MAX_SIZE 20 // longitud maxima para el nombre
struct Persona{
    char nombre[MAX_SIZE];
    int edad;
}; // siempre acabado en ;


Ahora para crear un objeto/variable de tipo <Persona> hay que seguir los mismos pasos que para cualquier otro tipo de variable pero sustituyendo el tipo de variable (int/float/char/...) por "struct" + <nombre struct>. En este caso, "struct Persona <nombre variable>". Y para acceder a las variables que están guardadas dentro de <Persona> se utiliza el punto (.). Te pongo un ejemplo.

// creamos la struct como se ve arriba
int main(){
    struct Persona yo;
    printf("Introduce tu nombre: ");
    scanf("%s", yo.nombre); // recomendable usar fgets()
    printf("Introduce tu edad: ");
    scanf("%d", &yo.edad); // en el scanf() anterior tambien vale scanf("%s", &yo.nombre) pero no es necesario el &

    printf("Tu nombre es %s y tienes %d años\n", yo.nombre, yo.edad);
}


He usado <scanf()> para guardar almacenar ambas variables para que veas cómo se usa pero las cadenas de caracteres es mejor que las guardes usando <fgets()>. El inconveniente es que se guardará también el <Enter> y cada vez que muestres la variable, acabará con un salto de línea. Eso se puede arreglar pero creo que mejor más adelante para no meter muchas cosas nuevas de golpe.

Ahora tienes que implementar tu código usando este ejemplo como guía, por ejemplo, crear un array de personas... :silbar:
Si tienes alguna duda al respecto siempre puedes preguntar. Suerte :-X
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;

JulianDronger

Si eh usado structs antes, pero no los use en este ejercicio. Gracias me sirvió de mucho tu respuesta, temía que pensaran que les pedía hacer un ejercicio por mi, y no te preocupes, ya se como arreglar el error por si se guarda el ENTER. Gracias, una vez mas