Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 26
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    636

    Problema scrittura di una struttura su file

    ciao a tutti
    ho una struct, con 3 campi, "ORDINE CONSEGNA", "COGNOME" E "VOTO".
    Una volta ordinato la struttura a seconda dell'ORDINE, poi del COGNOME (alfabetico) ed infine ordinare per VOTO.
    Devo scrivere questa struttura su un file.
    Quindi scrievere prima la struttura ordinata per ORDINE, poi per COGNOME ed infine per VOTO
    Io avevo pensato di eseguire una normale procedura di scrittura di un file e successivamente riaprire il file per aggiungere, secondo questa istruzione :

    codice:
     if ((cfPtr = fopen("ingresso.txt", "a")) == NULL){
            printf ("Il file non può essere aperto");
        }
    è giusto come procedimento?

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Perche' aprire e chiudere il file?

    Lo apri una volta, ci scrivi tutto quello che ci devi scrivere, e lo chiudi alla fine.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    636
    ok allora lo apro in questo modo
    codice:
    j = 0;
     if ((cfPtr = fopen("uscita.txt", "w")) == NULL){
            printf ("Il file non può essere aperto");
        }
    
        else{
            
            scanf ("%d%s%d",studente[j].ordi, studente[j].cogno, studente[j].vot);
    
            /*scrive nel file*/
    
            while (!feof(stdin)){
                fprintf (cfPtr, "%d %s %d\n", ordine, cognome, voto);
                scanf ("%d%s%d", studente[j].ordi, studente[j].cogno, studente[j].vot);
                j++;
    
    
    
            }
    
             fclose(cfPtr);
    
            }
    in questo modo scrivo nel file la prima struttura ordinata supponiamo per COGNOME..ma per accodare le altre strutture ordinate...come faccio ?

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Continui semplicemente a scrivere ... man mano che scrivi i dati vengono accodati ... non capisco il tuo problema.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    636
    quindi faccio il primo ciclo while (per la scrittura) dopo aver ordinato per "ORDINE".
    poi dopo aver ordinato per "COGNOME" faccio un'altro while per scrivere sul file la struttura ordinata per "cognome ed infine la stessa cosa per la struttura ordinata per VOTO...giusto?

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Sì ... non vedo il problema ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    636
    ho fatto cosi , am non va...arriva a stamparmi la struttura ordinata per Cognome..dopodichè si ferma

    codice:
    
    #include <stdio.h>
    #include <stdlib.h>
    #define n 2
    /*
     *
     */
    int main() {
    
    	struct studenti {
    		int ordi;
    		char cogno[20];
    		int vot;
    	}studente[n];
    
        int ordine;
        char cognome[20];
        int voto;
        int v;
        int z = 0;
    	int i = 0;
    	int j = 0;
        char buffer[20];
        int ordapp;
    	int votapp;
    
    
    
        FILE *cfPtr; /*cfPtr = punta al file ingresso.txt*/
    
        /*fopen apre il file*/
        if ((cfPtr = fopen("ingresso.txt", "w")) == NULL){
            printf ("Il file non può essere aperto");
        }
    
        else{
            printf ("Inserisci ordine, cognome, ed il voto dei 10 studenti: \n");
            printf ("Inserisci EOF per terminare l'inserimento \n");
            scanf ("%d%s%d", &ordine, cognome, &voto);
    
            /*scrive nel file*/
    
            while (!feof(stdin)){
                fprintf (cfPtr, "%d %s %d\n", ordine, cognome, voto);
                scanf ("%d%s%d", &ordine, cognome, &voto);
    
            }
    
             fclose(cfPtr);
    
            }
    
    
    
    
    
        /*fopen apre il file*/
        if ((cfPtr = fopen("ingresso.txt", "r")) == NULL){
            printf ("Il file non può essere aperto");
        }
        else{
            printf ("%15s%15s%15s","Ordine","Cognome","Voto\n");
            fscanf (cfPtr, "%d%s%d", &ordine, cognome, &voto);
            studente[i].ordi = ordine;
    		strcpy(studente[i].cogno,cognome);
    		studente[i].vot = voto;
    		i++;
    
        while (!feof(cfPtr)){
                printf ("%15d%15s%14d\n", ordine, cognome, voto);
                fscanf (cfPtr, "%d%s%d", &ordine, cognome, &voto);
    
    				studente[i].ordi = ordine;
    		        strcpy(studente[i].cogno,cognome);
    		        studente[i].vot = voto;
    				i++;
    
               }
            }
    
    
    
    
    
    
        fclose(cfPtr);
        system("PAUSE");
    
    
    	for (j = 0; j < i - 2; j++){
    		for (z = j + 1; z <= i - 1; z++){
    			v = strcmp(studente[j].cogno, studente[z].cogno);
    			if (v > 0){
    				strcpy(buffer, studente[z].cogno);
    				strcpy(studente[z].cogno, studente[j].cogno);
    				strcpy(studente[j].cogno, buffer);
    				ordapp = studente[z].ordi;
    				studente[z].ordi = studente[j].ordi;
    				studente[j].ordi = ordapp;
    				votapp = studente[z].vot;
    				studente[z].vot = studente[j].vot;
    				studente[j].vot = votapp;
    			}
    		}
    	}
    
         printf ("\nStampa ordinata per Cognome\n");
         printf ("%25s%25s%30s\n","ORDINE","COGNOME","VOTO");
         for (j = 0; j < i - 1; j++){
             printf ("%25d%25s%30d", studente[j].ordi, studente[j].cogno, studente[j].vot);
         }
    
    
    if ((cfPtr = fopen("uscita.txt", "w")) == NULL){
            printf ("Il file non può essere aperto");
        }
    
        else{
            j = 0;
            scanf ("%d%s%d", studente[j].ordi, studente[j].cogno, studente[j].vot);
    
            /*scrive nel file*/
    
            while (!feof(stdin)){
                fprintf (cfPtr, "%d %s %d\n", ordine, cognome, voto);
                scanf ("%d%s%d", studente[j].ordi, studente[j].cogno, studente[j].vot);
    			j++;
    		}
    
    
    for (j = 0; j < i - 2; j++){
    		for (z = j + 1; z <= i - 1; z++){
    
    			if (studente[j].ordi > studente[z].ordi){
    				strcpy(buffer, studente[z].cogno);
    				strcpy(studente[z].cogno, studente[j].cogno);
    				strcpy(studente[j].cogno, buffer);
    				ordapp = studente[z].ordi;
    				studente[z].ordi = studente[j].ordi;
    				studente[j].ordi = ordapp;
    				votapp = studente[z].vot;
    				studente[z].vot = studente[j].vot;
    				studente[j].vot = votapp;
    
    			}
    		}
    	}
    
    printf ("\nStampa ordinata per Ordine di Consegna\n");
         printf ("%25s%25s%30s\n","ORDINE","COGNOME","VOTO");
         for (j = 0; j < i - 1; j++){
             printf ("%25d%25s%30d", studente[j].ordi, studente[j].cogno, studente[j].vot);
         }
    
    j = 0;
            scanf ("%d%s%d", studente[j].ordi, studente[j].cogno, studente[j].vot);
    
            /*scrive nel file*/
    
            while (!feof(stdin)){
                fprintf (cfPtr, "%d %s %d\n", ordine, cognome, voto);
                scanf ("%d%s%d", studente[j].ordi, studente[j].cogno, studente[j].vot);
    			j++;
    		}
    
    for (j = 0; j < i - 2; j++){
    		for (z = j + 1; z <= i - 1; z++){
    
    			if (studente[j].vot < studente[z].vot){
    				strcpy(buffer, studente[z].cogno);
    				strcpy(studente[z].cogno, studente[j].cogno);
    				strcpy(studente[j].cogno, buffer);
    				ordapp = studente[z].ordi;
    				studente[z].ordi = studente[j].ordi;
    				studente[j].ordi = ordapp;
    				votapp = studente[z].vot;
    				studente[z].vot = studente[j].vot;
    				studente[j].vot = votapp;
    
    			}
    		}
    	}
    
    printf ("\nStampa ordinata per Voto\n");
         printf ("%25s%25s%30s\n","ORDINE","COGNOME","VOTO");
         for (j = 0; j < i - 1; j++){
             printf ("%25d%25s%30d", studente[j].ordi, studente[j].cogno, studente[j].vot);
         }
    
    		j = 0;
            scanf ("%d%s%d", studente[j].ordi, studente[j].cogno, studente[j].vot);
    
            /*scrive nel file*/
    
            while (!feof(stdin)){
                fprintf (cfPtr, "%d %s %d\n", ordine, cognome, voto);
                scanf ("%d%s%d", studente[j].ordi, studente[j].cogno, studente[j].vot);
    			j++;
    		}
    
    		fclose(cfPtr);
    
            }
    
    
        return 0;
    
    }

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ma che vuol dire "si ferma" ?

    Chiarisci un po' ... fai un po' di debug ... controlla il codice prima di postarlo ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    636
    cioè dopo la stampa a video della struttura ordinata per cognome..il cursore va a capo e basta.
    tu intendi il debug passo passo?

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da jurij7
    cioè dopo la stampa a video della struttura ordinata per cognome
    Ovvero? A partire da quale linea del tuo codice? Sai identificare la linea in questione?

    il cursore va a capo e basta.
    E non riesci a capire il perche' a partire dal codice che "segue" quello che hai detto?

    tu intendi il debug passo passo?
    Sì ...

    Tra l'altro, se non provi a risolvere da solo i problemi del codice che tu stesso scrivi, non imparerai mai a programmare, perche' questa e' l'attività più importante per imparare ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.