bueno creo que he conseguido algo...
el programa es una base de datos, introduces el nombre, el numero de registro y el numero de serie de un archivo y lo guarda, lo que queria es que se ordenase la lista en funcion del numero de registro, lo que he conseguido es que se ordene el numero de registro, pero no lo demas, me explico:
si introduces nombre: a nº registro:3 nº serie: 5
nombre:b nº registro:1 nº serie:6
pues sale asi: nombre a nº registro:1 nº serie 5
nombre: b nº registro 3 nº serie: 6
se ordena el numero de registro pero no lo demas, cual es mi error? aqui el codigo:
#include <stdio.h>
#include <string.h>
struct{
char nombreFich[41];
unsigned long numeroregistro;
unsigned long numeroserie;
} fichas[1000000];
int numeroFichas=0;
int i;
int opcion;
char textoTemporal[40];
unsigned long numeroTemporal;
int j;
int temp;
main()
{
do {
printf("Escoja una opción: (Teclee el numero de la opcion)\n"); printf("1.- Añadir datos de un nuevo fichero\n"); printf("2.- Mostrar los nombres de todos los ficheros\n"); printf("3.- Mostrar ficheros a partir de un cierto numero de registro\n"); printf("4.- Mostrar ficheros a partir de un cierto numero de serie\n"); printf("5.- Ordenar por numero de registro\n"); printf("6.-Ordenar por numero de archivo\n"); printf("7.- Ver datos de un fichero\n"); sscanf(textoTemporal
, "%d", &opcion
); switch(opcion){
case 1:
if (numeroFichas < 1000000) {
printf("Introduce el nombre del fichero: "); gets(fichas
[numeroFichas
].
nombreFich); printf("Introduce el numero de registro: "); sscanf(textoTemporal
,"%ld",&fichas
[numeroFichas
].
numeroregistro); printf("Introduce el numero de serie: "); sscanf(textoTemporal
,"%ld",&fichas
[numeroFichas
].
numeroserie); numeroFichas++;
} else
printf("Máximo de fichas alcanzado (1000000)!\n"); break;
case 2:
for (i=0; i<numeroFichas; i++)
printf("Nombre: %s; Nº Registro: %ld; Nº Registro: \n", fichas[i].nombreFich, fichas[i].numeroregistro, fichas[i].numeroserie);
break;
case 3:
printf("¿A partir de que nº de registro quieres que se muestre?"); sscanf(textoTemporal
, "%ld", &numeroTemporal
); for (i=0; i<numeroFichas; i++)
if (fichas[i].numeroregistro >= numeroTemporal)
printf("Nombre: %s; Nº Registro: %ld; Nº Serie: %1d; \n", fichas[i].nombreFich, fichas[i].numeroregistro, fichas[i].numeroserie);
break;
case 4:
printf("¿A partir de que nº de serir quieres que se muestre?"); sscanf(textoTemporal
, "%ld", &numeroTemporal
); for (i=0; i<numeroFichas; i++)
if (fichas[i].numeroserie >= numeroTemporal)
printf("Nombre: %s; Nº Registro: %ld; Nº Serie: %1d; \n", fichas[i].nombreFich, fichas[i].numeroregistro, fichas[i].numeroserie);
break;
case 5:
for(i=0; i<(numeroFichas-1); i++) {
for (j=i+1; j<numeroFichas; j++) {
if(fichas[j].numeroregistro<fichas[i].numeroregistro) {
temp = fichas[j].numeroregistro;
fichas[j].numeroregistro = fichas[i].numeroregistro;
fichas[i].numeroregistro = temp;
}
}
}
for(i=0; i<numeroFichas ; i++) {
printf("Nombre: %s; Nº registro: %ld; Nº serie: %1d\n", fichas
[i
].
nombreFich, fichas
[i
].
numeroregistro, fichas
[i
].
numeroserie); }
break;
case 6:
for(i=0; i<(numeroFichas-1); i++) {
for (j=i+1; j<numeroFichas; j++) {
if(fichas[j].numeroserie<fichas[i].numeroserie) {
temp = fichas[j].numeroregistro;
fichas[j].numeroserie = fichas[i].numeroserie;
fichas[i].numeroserie = temp;
}
}
}
for(i=0; i<numeroFichas ; i++) {
printf("Nombre: %s; Nº registro: %ld; Nº serie: %1d\n", fichas
[i
].
nombreFich, fichas
[i
].
numeroserie, fichas
[i
].
numeroserie); }
break;
case 7:
printf("¿De qué fichero quiere ver todos los datos?"); for (i=0; i<numeroFichas; i++)
if (strcmp(fichas
[i
].
nombreFich, textoTemporal
) == 0) printf("Nombre: %s; Nº registro: %ld; Nº serie: %1d \n", fichas[i].nombreFich, fichas[i].numeroregistro, fichas[i].numeroserie);
for (i=0; i<numeroFichas; i++)
if (strcmp(fichas
[i
].
nombreFich, textoTemporal
) != 0) if (strstr (fichas
[i
].
nombreFich, textoTemporal
) != NULL
) printf("Nombre: %s; Nº registro: %ld; Nº serie: %1d (Busqueda a partir de la palabra tecleada, archivos coincidentes)\n", fichas[i].nombreFich, fichas[i].numeroregistro, fichas[i].numeroserie);
break;
case 8:
break;
default:
printf("Opción desconocida!\n"); break;
}
}
while (opcion != 8);
}