
Originariamente inviata da
oregon
vedi è il tipo non il nome del vettore. Dovrai scrivere
vedi *vett
cioè sostituire in tutte le chiamate di "v" vett?
fammi un sempio sul codice cohe ho scarabocchiato .
Esempio :
codice:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<iostream>
#include<math.h>
#define STORE_FILE "store.dat"
#define L 50 //do una dimensione max al vettore
typedef struct { //creo vettore in cui salvare le letture
char campo1 [L];
char campo2 [L];
} vedi;
void scambia (vedi[],long ,long );
void Qsort(vedi[],long,long );
vedi *vett ;
unsigned long g;
int main(void )
{
do{
printf("\nInserisci la grandezza del vettore :");
scanf("%u",&g);
} while (g<2);
vett=(vedi*) malloc(g*sizeof(vedi));
char tp;{
printf("\n\t----------");
printf("\n\t1-Leggi file" );
printf("\n\t2-ordina File");
printf("\n\t3-esci");
printf("\n\t----------");
}
printf("\n\t-Scelta :",tp);
tp=getchar();
getchar();
switch (tp){
case '1':
FILE *fp;
int i;
vedi m;
if(!(fp=fopen("store.dat","rb"))){
printf("\n errore di lettura dei dati%s ",STORE_FILE); //creo il controllo
exit(1);
}
while (fread(&m,sizeof(m),1,fp)>0){ //legggo il file binario esterno
printf("\n-------------");
printf("\ncampo1:%s",m.campo1); //stampo i dati salvati nalla typedef struct
printf("\ncampo2:%s",m.campo2);
printf("\n-------------");
}
fclose(fp);
return main();
break;
case '2':
vedi *vett;
void scambia(vedi [],long i,long j) ;{
long i;
long j;
vedi temp =vett[i];
vett[i]=vett[j];
vett[j]=temp;
}
void Qsort(vedi [],long min ,long mag);
{ long min;
long mag;
long i=min;
long j=mag;
vedi pivot =vett[(min+mag)/2];
while (i<=j){
while (strcmp(vett[i].campo1,pivot.campo1)<0 || (!strcmp(vett[i].campo1,pivot.campo1)<0))
i++;
while (strcmp(vett[j].campo1,pivot.campo1)>0 || (!strcmp(vett[j].campo1,pivot.campo1)<0))
j--;
}
if (i<j)
scambia (vett,i,j);
if(i<=j){
i++;
j--;
}
{
if (min<j) Qsort(vett,min,j);
if (i<mag) Qsort(vett,i,mag);
}
}
break;
case '3':
exit (1);
break ;
}
}