PDA

Visualizza la versione completa : [C] Ordinamento degli elementi di un file


TheJoeseph
31-07-2014, 13:24
Salve,
devo fare l'ordinamento degli elementi di un file ma non riesco a venirne a capo, potreste aiutarmi per favore?
l'esercizio consiste nell'inserire degli studenti all'interno di un file e stampare direttamente a video la lista ordinata in base al nome.
qui il codice:

#include <stdio.h>#include <stdlib.h>
#include <string.h>
struct tabella {
int code;
char name[20];
char surname[20];


};
void insert_sort ();
void menu();
void stamp();
void search();
void del();


int main () {
int comando;
do{
menu();
printf("\ncomando:\t ");
scanf("%d",&comando);
switch (comando) {
case 1:{
insert_sort();
break;
}

case 2: {
search();
break;
}

case 3: {
del();
break;
}

case 4: {
stamp();
break;
}
}
} while (true);

return 0;
}


void menu() {
printf("|||||||||||||||||||||||||||||");
printf("\n1)Registra uno studente");
printf("\n2)Cerca uno studente");
printf("\n3)Elimina uno studente");
printf("\n4)Visualizza elenco");
printf("|||||||||||||||||||||||||||||");
}


void insert_sort() {
FILE *fp;
int risp;
int i,j,temp;
struct tabella studenti;
fp=fopen("file.txt","a");
do {
printf("Inserisci matricola: ");
scanf("%d",&studenti.code);
printf("Inserisci nome: ");
scanf("%s",studenti.name);
printf("Inserisci cognome: ");
scanf("%s",studenti.surname);
fwrite(&studenti,sizeof(struct tabella),1,fp);
printf("Desideri continuare? (1=SI e 0=NO)");
scanf("%d",&risp);

}while (risp==1);

while(!feof) {
fread(&studenti,sizeof(struct tabella),1,fp);
for(i=0,j=1;j<feof(fp);i++,j++){

if(studenti[i].name>studenti[j].name) {
temp=studenti[i].name;
studenti[i].name=studenti[j].name;
studenti[j].name=temp; }
}
}
fwrite(&student,sizeof(struct tabella),1,fp);
fclose(fp);


}


void stamp(){
FILE *fp;
struct tabella studenti;
fp=fopen("file.txt","r");
while(fread(&studenti,sizeof(struct tabella),1,fp)>0) {
printf("Codice \t Nome \t Cognome \n");
printf("%d \t %s \t %s",studenti.code, studenti.name, studenti.surname);
}
fclose(fp);
}




grazie.

Ronald940
31-07-2014, 14:19
Ma non si pu creare una funzione ordina e poi la richiami nella funzione inserisci?

TheJoeseph
31-07-2014, 14:45
ciao Ronald, purtroppo l'esercizio richiede di creare un' UNICA funzione :( PS. ma chiedermelo direttamente? (ronald un mio cugino ed a 2 metri da me) XD

Scara95
31-07-2014, 16:13
Scrivi quali problemi incontri: errori in compilazioni, in runtime, ...

TheJoeseph
31-07-2014, 16:26
il problema nella correttezza dell'algoritmo di ordinamento comunque allego un immagine. http://i.imgur.com/CdSDfq1.png

MItaly
31-07-2014, 22:21
Evita di postare codice ed errori come screenshot, si fa fatica a leggerli e a copia-incollarli. Piuttosto, incollali sul forum come testo (eventualmente prendendoli dal pane "Log di compilazione" se da l non si riescono a copiare).

TheJoeseph
31-07-2014, 22:40
Ciao Mitaly, il codice postato sopra, volevo solo mostrare gli errori comunque se tu fai zoom sulla pagina si legge benissimo

Scara95
01-08-2014, 12:25
Studenti non un array, quindi non puoi utilizzare l'operatore []. Questo sta dicendo l'errore.
Tra parentesi: Dev-C++ sarebbe un compilatore C++ quindi del una parola riservata e non lo puoi utilizzare come nome di funzione.

minomic
01-08-2014, 15:38
Dev-C++ sarebbe un compilatore C++
@TheJoeseph
Quel "sarebbe" da intendersi come segue: Dev-C++ un progetto estremamente obsoleto e pieno di bug, pertanto altamente sconsigliato utilizzarlo. Meglio migrare a IDE pi moderni e affidabili, come l'eccellente Code::Blocks.

Altrimenti, cosa che io consiglio e apprezzo molto, Linux + editor testuale + terminale.

:ciauz:

MItaly
02-08-2014, 00:32
Tra parentesi: Dev-C++ sarebbe un compilatore C++ quindi del una parola riservata
:confused: non mi risulta, del parola riservata in Python, forse per quello che il syntax highlighter si incasina :bh:


Ciao Mitaly, il codice postato sopra, volevo solo mostrare gli errori comunque se tu fai zoom sulla pagina si legge benissimo

Effettivamente si legge, comunque c' anche un discorso di ricercabilit: il testo indicizzato da Google (per cui chi incontra un problema analogo pu trovare facilmente la discussione), gli screenshot no (o meglio, non come testo). In questo caso ovviamente dubito che effettivamente qualcun altro abbia il tuo problema specifico, ma in generale piuttosto importante.
In futuro tienine conto. :ciauz:

Loading