Ho scritto questo codice come esercizio di fread , di un file dat esterno non generato dal programma .
La prima parte funziona.
poi volevo ordinarlo con una Qsort ma mi da i seguenti errori (sono alle prime armi).
C:\Users\AppData\Local\Temp\ccmCMoGe.o freadSemplice.cpp
.text+0x36c): undefined reference to `scambia(vedi*, long, long)'
C:\Users\AppData\Local\Temp\ccmCMoGe.o freadSemplice.cpp
.text+0x3c1): undefined reference to `Qsort(vedi*, long, long)'
C:\Users\AppData\Local\Temp\ccmCMoGe.o freadSemplice.cpp
.text+0x3f0): undefined reference to `Qsort(vedi*, long, long)'
C:\Users\Desktop\Prova programmi\collect2.exe [Error] ld returned 1 exit status
Il codice che ho scritto è il seguente :
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 *v ;
unsigned long g;
int main(void )
{
do{
printf("\nInserisci la grandezza del vettore :");
scanf("%u",&g);
} while (g<2);
v=(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 *v;
void scambia(vedi [],long i,long j) ;{
long i;
long j;
vedi temp =v[i];
v[i]=v[j];
v[j]=temp;
}
void Qsort(vedi [],long min ,long mag);
{ long min;
long mag;
long i=min;
long j=mag;
vedi pivot =v[(min+mag)/2];
while (i<=j){
while (strcmp(v[i].campo1,pivot.campo1)<0 || (!strcmp(v[i].campo1,pivot.campo1)<0))
i++;
while (strcmp(v[j].campo1,pivot.campo1)>0 || (!strcmp(v[j].campo1,pivot.campo1)<0))
j--;
}
if (i<j)
scambia (v,i,j);
if(i<=j){
i++;
j--;
}
{
if (min<j) Qsort(v,min,j);
if (i<mag) Qsort(v,i,mag);
}
}
break;
case '3':
exit (1);
break ;
}
}
chi mi aiuta ?????????????????