Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17

Discussione: [C] Esame imminente!

  1. #1

    Esame imminente!

    Sono rovinato!! mi hanno chiesto per un esame per l'8 luglio un programma im C che per chi ha fatto programmazione in precedenza credo sia una cavolata io ho fatto solo un mese!!
    Il programma deve fare un menu che mi permetta di fare un inserimento e salvataggio di dati alunni(nome, cognome, classe, età in anni),un ordinamento in base alla loro età, un calcolo della media dell età di tutti i dati inseriti nel file. Ho buttato giu un po di codice scopiazzando qualcosa di simile ma non so se posso salvare in un unico file due cose HELP ME!:
    void inserimento ()
    {n_studenti+1;
    FILE *fp;
    struct studente s;
    fp=fopen("peresame.dat","a+");
    printf("\n Inserisci il nome dell'alunno/a: ");
    scanf ("%s",alunni[n_studenti].nome);
    printf("\n Inserisci il cognome dell'alunno/a: ");
    scanf("%s",alunni[n_studenti].cognome);
    printf("\n Inserisci la classe dell'alunno/a: ");
    scanf("%s",alunni[n_studenti].classe);
    printf("\n Inserisci l'altezza dell'alunno/a: ");
    scanf("%d",&alunni[n_studenti].altezza);
    printf("\n Inserire il peso dello alunno/a: ");
    scanf("%d",&alunni[n_studenti].peso);
    printf("\n Inserire l'eta' dell' alunno/a:");
    scanf("%d",&alunni[n_studenti].eta);
    fwrite(&s,1,sizeof(struct studente),fp);
    fclose(fp);
    n_studenti=n_studenti+1;
    FILE *numero;
    numero=fopen("nstudenti.dat","a+");
    fwrite(&n,1,sizeof(int n_studenti),numero);
    fprintf(stdout,"\n Visualizzami il numero degli studenti inseriti:%d\n",n_studenti);
    fclose(numero);
    }
    ARCANOOOOOOO

  2. #2
    E' la seconda parte dove apro il secondo file che faccio casino
    ARCANOOOOOOO

  3. #3

    partiamo dal menu...

    Posso aiutarti...

    beh io inizio...

    (non è difficile ma è lungo da fare...)


    codice:
    typedef struct{
       char nome[20];
       char cognome[20];
       int eta;
       char classe[4];
    }STUDENTE;
    
    
    
    void main(){
    int opz;
    opz = 1;
    while (opz!=4)
    switch (opz){
           opz = menu();
           case 1:
               inserisci();
               break;
           case 2:
               ordina();
               break;
           case 3:
               medie();
               break;
           case 4:
              printf ("grazie e arrivederci!!! \n");
              break;
           default:
               printf(scelta non ponderata \n);
               break;
    }
    
    
    //menu
    int menu(){
        int opz;
        printf("1. Inserisci \n");
        printf("2. Ordina \n");
        printf("3. Calcola Medie \n");
        printf("4. esci\n");
        printf ("effettua una scelta");
        scanf ("%d",&opz);
        return opz;
    }
    Powered by MacOSX Lion

  4. #4

    Ora andiamo con l' inserimento

    una domanda; il programma non prevede cancellazione?

    codice:
    void iserimento(){
       FILE *anagrafica;
       STUDENTE s;
       printf ("Inserisci il nome dello studuente /n");
       scanf ("%s",&s.nome);
       printf ("Inserisci il cognome dello studente /n");
       scanf ("%s",&s.cognome);
       printf ("Inserisci età dello studente /n");
       scanf ("%d",&s.eta);
       printf ("Inserisci la classe /n")
       scanf("%s",&s.classe);
       anagrafica = fopen("nomefile.dat","a");
       fwrite(&s,1,sizeof(STUDENTE),anagrafica);
       fclose(anagrafica);
    }
    Powered by MacOSX Lion

  5. #5
    Poi finisco... altrimenti qui non mi vedono mai lavorare... Ciao
    Powered by MacOSX Lion

  6. #6
    [SUGGERIMENTO]
    sostituisci scanf() con
    fgets(s.cognome, 20, stdin); // stessa cosa con "nome"
    [/SUGGERIMENTO]


    p.s. fgets() ti permette di acquisire anche nomi composti
    tipo: "DE CARLO" "LUCIANO MARIA" ecc...
    ...Terrible warlords, good warlords, and an english song

  7. #7
    :quote:

    Giusto non ci avevo pensato... è da un bel pezzo che non programmo in c...

    GRAZIE
    ciao

    Powered by MacOSX Lion

  8. #8
    Ho deciso di realizzare una funzione per prelevare i dati...

    codice:
    STUDENTE* recuperoinfo (int *numero){
       FILE *anagrafica;
       STUDENTE *s=null;
       int i=1;   
       anagrafica = fopen("nomefile.dat","r");
       fread(s,sizeof(STUDENTE),1,anagrafica);
       while(!feof(anagrafica)){
             i++;
             s=(STUDENTE *)realloc(s,i*sizeof(STUDENTE));
             fread (s,sizeof(STUDENTE),1,anagrafica);
       }
       fclose(anagrafica);
       numero = &i;
       return s; 
       
    )
    Powered by MacOSX Lion

  9. #9
    Il mio problema era nel salvataggio del file infatti nel void inserimento volevo ke per ogni inserimento mi venisse salvata anche una variabile a parte che avrei potuto utilizzare in seguito come totale dei dati salvati per fare la media o è rozzo??
    Come posso fare?
    L'altra parte del programma non l ho messa perche non so se si puo riempire il forum con tante righe di codice.. :tongue:
    Poi chi mi spiega dove e come si usano realloc e malloc?
    ARCANOOOOOOO

  10. #10
    Io ti consiglierei, se vuoi sapere quanti record contiene un file, di usare la funzione:

    long ftell(FILE *stream)

    che ritorna la posizione del puntatore interno del file...

    cmq per una cosa + elegante (visto che il n° di record penso che ti serva per calcolare la dimensione dell' array contenitore) puoi usare delle funzioni di allocazione dinamica della memoria...

    vedi:

    calloc
    malloc
    realloc

    cmq posta pure il codice che provo a dare un'occhiata...

    Ciao
    Powered by MacOSX Lion

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.