Estructuras y archivos en c++

Iniciado por Luifs, 7 Junio 2013, 21:04 PM

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

Luifs

Alguien me podria ayudar con mi codigo
Citar#include <stdio.h>

int main(){
   printf("\nBienvenidos al lector \n");

   FILE* miarchivo;
   char* nombrearchivo= "texto1.txt";
   char lectura[80];
   int i;
   miarchivo= fopen(nombrearchivo, "r");

   for(i=0; i<10; i++)
   {
      if(miarchivo==NULL)return -1;

      fscanf(miarchivo," %[^\n]",&lectura);
      printf("Linea %d: %s  \n",i+1,lectura);
   }

fclose(miarchivo);
}

Solamente me muestra el contenido del archivo

este es el contenido del archivo de texto
as 10 08
as 20 15
as 30 35
as 70 94
as 90 75
as 84 74
as 75 12
as 08 15
as 25 98
as 12 15

Pero ahora necesito que me ordene del mayor al menor segun las cantidades que estan en medio y luego del mayor al menor segun las cantidades de la tercera columna..



Puntoinfinito

Pues no hagas el output directamente, simultáneamente puedes guardar todo en alguna matriz y con condicionales vas mostrando de mayor a menor. Crea por ejemplo una matriz para la columna del medio y para la última.

int columna_Medio[10];
int columna_Derec[10];


Entonces en cambio de hacer scanf guardar en variables.

lectura = columna_Medio[i]
// y en el siguiente bucle ...
lecutra = columna_Derec[i]


Para eso no podrás leer toda una linea de golpe, sino de espacio en espacio e ir almacenando. Después de esto, podrías crear una función para que quede más bonito :3 que se ocupe de hacer comparaciones del palo:

while (true) {
   for (int i = 0; i++; i < 10) {
       // Comparación con matriz controlada por i
       for (int z = 0; z++ ; z < 10) {
           // Comparación matriz controlada por variable z
          // Y así hasta llegar a comparar todos con todos  
      }
   }
}
AHORA EN SOFTONIC || CLICK HERE!!
Base64: QWNhYmFzIGRlIHBlcmRlciAxIG1pbnV0byBkZSB0dSB2aWRhLiBPbOkh



HACK AND 1337 : http://hackandleet.blogspot.com
WEBSITE: http://www.infiniterware.

Luifs

Y no puedes asignar cada campo a una estructura?

Puntoinfinito

No se a que te refieres exactamente, si te refieres a poner cada uno de los cadena de números, sí, podrías hacerlo. Puedes hacer otra división de matrices dentro de otras y tenerlo mejor ordenado.

int asdf[10][3];

Y vas poniendo del asdf[0] (primera linea) el segundo valor ([1]) debe compararse con tal:

if (asdf[0][1] == "aksdjsakld") etc {

Saludooos

AHORA EN SOFTONIC || CLICK HERE!!
Base64: QWNhYmFzIGRlIHBlcmRlciAxIG1pbnV0byBkZSB0dSB2aWRhLiBPbOkh



HACK AND 1337 : http://hackandleet.blogspot.com
WEBSITE: http://www.infiniterware.

Luifs

Disculpa como podria hacer que me ordene del mayor al menor tomando en cuenta la columna del centro
Citar
#include <stdio.h>

struct
{
   char nombre[35];
   int venta;
   int importe;
} productos;

int main(){
   printf("\nBienvenidos al lector \n");

   FILE* miarchivo;
   char* nombrearchivo= "texto1.txt";
   int i;
   miarchivo= fopen(nombrearchivo, "r");

   for(i=0; i<10; i++)
   {
      fscanf(miarchivo,"%s",&productos.nombre);
      printf("Linea %d: %s  ",i+1,productos.nombre);

      fscanf(miarchivo,"%d",&productos.venta);
      printf(" %d  ",productos.venta);

      fscanf(miarchivo,"%d",&productos.importe);
      printf(" %d  \n",productos.importe);
   }



rir3760

Los pasos en lo general son:

1) Declaras un array de estructuras para almacenar ahí cada uno de los registros.
2) Lees cada registro, lo políticamente correcto es utilizar fgets para leer una linea de texto y a continuación sscanf para extraer los tres campos pero, por sencillez, puedes empezar con fscanf.
3) Una vez tienes todos los registros en memoria los ordenas manualmente mediante una función propia o utilizando la función qsort (prototipo en <stdlib.h>). Sin importar el caso te conviene crear una función que compare dos registros y te diga su relación (si el primero es menor, igual o mayor que el segundo).

Empieza a desarrollarlo tu solo y te ayudamos en las partes donde tengas dificultades.

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language