Hola, ayuda por favor, tengo un código para C que no compila, estoy tratando de crear una agenda.

Este es mi código, que esta organizado por 1 estructura y utiliza el método de la burbuja para ordenar los datos alfabéticamente, pero me manda error en las ultimas lineas y no tengo ni la mas mínima idea del porque. Todo lo he programado en Dev-C++. Y la verdad es que estoy aprendiendo como se hace esto, cualquier corrección que se le puede hacer seria de gran ayuda para mi. Y una ultima cosa, de favor no me den un código con concatenaciones o algo así, que ese tema no lo he llevado todavía.
He aquí mi código:

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>

void ordenar();
char resp;

main()
{
do
{
system("color 1f");
system("CLS");
printf("\t PROGRAMA QUE ORDENA UN CONJUNTO DE N ELEMENTOS v1.0 \n");
ordenar();
printf("\n \n Quieres ingresar otros datos? S=si, n=no \n");
resp=getche();
} while(resp=='s'||resp=='S');
}

void ordenar()
{
int ngente, i=1, op;
struct persona
{
char nombre[50];
int edad;
}agenda[500];

printf("\n Cuantas personas quieres registrar? ");
scanf("%i", &ngente);

for(i=1; i<=ngente; i++)
{
printf("\n PERSONA %d", i);
printf("\n Nombre: ");
fflush(stdin);
gets(agenda. Nombre);
printf(" Edad: ");
scanf("%d", &agenda.edad);
}


printf("\n Voy a ordenar los datos alfabéticamente, enter para continuar.");
getch();
int j=1, auxedad, compara;
char *aux;


for(i=1; i<ngente; i++)
{
for(j=0; j<(ngente-i); j++)
{
compara=strcmp(agenda[j].nombre,agenda[j+1].nombre);
if(compara>0)
{
aux=agenda[j].nombre;
auxedad=agenda[j].edad;
agenda.nombre=agenda[i+1].nombre;
agenda[j].edad=agenda[j+1].edad;
agenda[i+1].nombre=aux;
agenda[j+1].edad=auxedad;
}
}
}


for(i=1; i<=ngente; i++)
{
printf("\n %c", agenda.nombre);
printf(" %d\n", agenda.edad);
}
}

1 respuesta

Respuesta
1

Para otra vez, seria interesante que pusieses el código exacto de error.

De todas formas, has cometido unos cuantos errores. Te pongo el código arreglado y si tienes alguna duda, me preguntas

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
void ordenar();
int main(int argc, char **argv) {
 do {
 system("color 1f");
 system("CLS");
 printf("\t PROGRAMA QUE ORDENA UN CONJUNTO DE N ELEMENTOS v1.0 \n");
 ordenar();
 printf("\n \n Quieres ingresar otros datos? s=si, n=no \n");
 resp=getche();
 } while(resp=='s'||resp=='S');
 return (0);
}
void ordenar() {
 int i, j, ngente;
 int compara;
 struct persona {
 char nombre[50];
 int edad;
 } agenda[500], aux;
 printf("\n Cuantas personas quieres registrar? ");
 scanf("%i", &ngente);
 for(i=0; i < ngente; i++){
 printf("\n PERSONA %d", i+1);
 printf("\n Nombre: ");
 fflush(stdin);
 gets(agenda.nombre);
 printf(" Edad: ");
 scanf("%d", &agenda.edad);
 }
 printf("\n Voy a ordenar los datos alfabéticamente, enter para continuar.");
 getch();
 for(i = 1; i < ngente; i++) {
 for(j = 0; j < (ngente-i); j++) {
 compara=strcmp(agenda[j].nombre,agenda[j+1].nombre);
 if(compara>0) {
 aux = agenda[j];
 agenda[j] = agenda[j+1];
 agenda[j+1] = aux;
 }
 }
 }
 for(i=0; i<ngente; i++) {
 printf("\n %s", agenda.nombre);
 printf(" %d\n", agenda.edad);
 }
}

Este código funciona correctamente, pero también se puede escribir de una forma mas elegante como el siguiente:

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
struct persona {
 char nombre[50];
 int edad;
};
void imprimir_cabecera () {
 system("color 1f");
 system("CLS");
 printf("\t PROGRAMA QUE ORDENA UN CONJUNTO DE N ELEMENTOS v1.0 \n");
}
void ordenar(struct persona agenda[], int ngente) {
 int i, j;
 int compara;
 struct persona aux;
 printf("\n Voy a ordenar los datos alfabéticamente, enter para continuar.");
 getch();
 for(i = 1; i < ngente; i++) {
 for(j = 0; j < (ngente-i); j++) {
 compara=strcmp(agenda[j].nombre,agenda[j+1].nombre);
 if(compara>0) {
 aux = agenda[j];
 agenda[j] = agenda[j+1];
 agenda[j+1] = aux;
 }
 }
 }
}
int introducir_datos(struct persona agenda[]) {
 int i, ngente;
 printf("\n Cuantas personas quieres registrar? ");
 scanf("%i", &ngente);
 for(i=0; i < ngente; i++){
 printf("\n PERSONA %d", i+1);
 printf("\n Nombre: ");
 fflush(stdin);
 gets(agenda.nombre);
 printf(" Edad: ");
 scanf("%d", &agenda.edad);
 }
 return (ngente);
}
void imprimir_tabla_ordenada(struct persona agenda[], int numero) {
 int i;
 for(i=0; i < numero; i++) {
 printf("\n %s", agenda.nombre);
 printf(" %d\n", agenda.edad);
 }
}
int main(int argc, char **argv) {
 char resp;
 struct persona agenda[500];
 int numero_datos;
 do {
 imprimir_cabecera();
 numero_datos = introducir_datos(agenda);
 ordenar(&agenda, numero_datos);
 imprimir_tabla_ordenada(agenda, numero_datos);
 printf("\n \n Quieres ingresar otros datos? s=si, n=no \n");
 resp=getche();
 } while(resp=='s'||resp=='S');
 return (0);
}

Saludos y si tienes alguna duda mas, no dudes en preguntar.

Gracias por responder, si me ha servido.

Solo una cosa he notado que no servia, pero la pude corregir yo, cuando estas en la función ordenar() en la parte en la que se piden los datos:

gets(agenda.nombre); debió de

y también,

scanf("%d", &agenda.edad); debió de ser: scanf("%d", &agenda.edad);


Y se me olvidaba, antes del main(), no se había declarado char resp;

Lo demás corre perfecto con el 1er método que me diste, agradezco mucho la ayuda.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas