Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2009
    Messaggi
    33

    [C] Aiutatemi a fare l'esercizio

    Linguaggio predefinito C, programma che uso DevC++.
    Sto sviluppando un nuovo esercizio che chiede i seguenti punti:
    1. L'autore deve far stampare a schermo il proprio nome e cognome che devono essere conservati in opportuni campi di una struttura;
    2. Caricare in RAM tutte le eventuali informazioni già presenti in un file prefissato (pagelle.txt);
    3. Inserire un nuovo studente nell'elenco inserendo nome, cognome, classe e voti ottenuti in pagella (codificati con unsigned int) (Le materie sono: italiano, matematica, informatica, religione);
    4. Visualizza a schermo tutti gli elementi presenti nell'elenco;
    5. Cerca studente per cognome (richiedere il cognome, cercare il cognome nel menù, stampare a schermo i dati di tutti gli studenti con quel cognome;
    6. Salvare una pagella su un file (richiedere cognome dello studente, visualizza a schermo i risultati, salvare su un file con nome a piacere).

    Ho già sviluppato il 1° e 3° punto, riesco a compilare, il programma parte, ma dopo che ho inserito nome, cognome, classe es i voti, non mi salva i dati nel file ed il programma si blocca.
    Ecco il codice:
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    #define MAX_CHARS 50
    #define MAX_ELEM 100
    #define FILE_PRED "pagelle.txt"
    
      struct studente {
             char nome [MAX_CHARS];
             char cognome [MAX_CHARS];
             } io={"Pinco","Pallino"};
      
      struct pagelle {
             char nome [MAX_CHARS];
             char cognome [MAX_CHARS];
             char classe [MAX_CHARS];
             int italiano [2];
             int matematica [2];
             int informatica [2];
             int religione [2];
             };
    
      //PROTOTIPI
      int inserisci (struct pagelle elenco_pagelle[], int n);
          
    
      
    int main(int argc, char *argv[])                  // Inizio programma
    {
      struct pagelle elenco_pagelle [MAX_ELEM];
      
      printf("\nAutore del programma:");              //Stampa i dati dell'autore
      printf("\n-------------------------");
      printf("\n Nome:    %s\n Cognome: %s",io.nome,io.cognome);
      printf("\n-------------------------");
      
      int n=0;
      int scelta;
      
      do {
          printf("\n Seleziona cio' che desideri fare:");
          printf("\n 1. Inserisci nuovo studente");
          printf("\n 2. ");
          printf("\n 3. ");
          printf("\n 4. ");
          printf("\n 0. Esci");
          printf("\n\nScegli: ");
          scanf("%d",&scelta);
          
          switch (scelta) {
                      case 1: {
                           n=inserisci (elenco_pagelle,n);
                           break;
                           }
                      case 0: {
                           exit(0);
                           break;
                           }
          }
      }
        while(scelta!=0);
        system("pause");
        return 0;
    
    
    }
    
      int inserisci (struct pagelle elenco_pagelle[], int n) {
    
          if(n>MAX_ELEM) {
             printf("Non puoi aggiungere altri studenti\n");
             system("pause");
             return n;
             }
          
          printf("\nNon iserire spazi e/o lettera accentate\n");
          printf("\nInserisci nome: ");
          scanf("%s",elenco_pagelle[n].nome);
          printf("\nInserisci cognome: ");
          scanf("%s",elenco_pagelle[n].cognome);
          printf("\nInserisci classe: ");
          scanf("%s",elenco_pagelle[n].classe);
          printf("\nInserisci voto italiano: ");
          scanf("%u",elenco_pagelle[n].italiano);
          printf("\nInserisci voto matematica: ");
          scanf("%u",elenco_pagelle[n].matematica);
          printf("\nInserisci voto informatica: ");
          scanf("%u",elenco_pagelle[n].informatica);
          printf("\nInserisci voto religione: ");
          scanf("%u",elenco_pagelle[n].religione);
          printf("\n\n");
          
          FILE*fp=fopen(FILE_PRED,"a");
          if(fp==NULL) {
               printf("Impossibile salvare!\n");
                       }
          else {
               fprintf(fp,"%s %s %s %u %u %u %u",elenco_pagelle[n].nome,elenco_pagelle[n].cognome,elenco_pagelle[n].classe,elenco_pagelle[n].italiano,elenco_pagelle[n].matematica,elenco_pagelle[n].informatica,elenco_pagelle[n].religione);
               printf("------------SALVATO------------\n\n");
               fclose(fp);
               }
          return n;
      }
    Cos'è che non va?
    Per il numero 2 dell'esercizio non so come devo fare. Se potete dirmi come fare bene, ma prima bisogna risolvere il problema dell'inserimento di un nuovo studente.

  2. #2
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    1) dov'è il corpo del while? a me sembra solo lo switch quindi non terminerà mai
    2) dov'è la scrittura su file? tu crei il file ma non scivi

    Come si usa la fprintf?? http://www.cplusplus.com/reference/c...stdio/fprintf/

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2009
    Messaggi
    33
    Ho dimenticato di mettere "fp" dopo fprintf...
    Riguardo al while, l'ho usato perché, guardando esercizi già svolti, è presente in tutti essi.
    Invece mi sono dimenticato di mettere il blocco con i vari printf e lo switch dentro un do{...}, ora rimedio subito e lo sistemo all'inizio della discussione..

  4. #4
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    ora dopo le correzioni come funziona?

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2009
    Messaggi
    33
    Adesso se voglio inserire un nuovo studente riesco a farlo.
    Ho scritto nel frattempo la parte per visualizzare i dati presenti nel'elenco.
    Ecco il codice per effettuare quest'opzione:
    codice:
      int visualizza (struct pagelle elenco_pagelle[], int n) {
      int scelta;
          FILE*fp=fopen(FILE_PRED,"r");
          if(fp==NULL) {
               printf("-----Errore di lettura. Il file non esiste-----\n");
               return (scelta);
               }
          else {
               printf("Ecco gli studenti presenti in elenco:\n\n");
               printf("%s %s %s %u %u %u %u",elenco_pagelle[n].nome,elenco_pagelle[n].cognome,elenco_pagelle[n].classe,elenco_pagelle[n].italiano,elenco_pagelle[n].matematica,elenco_pagelle[n].informatica,elenco_pagelle[n].religione);
               return 0;
               }
          fclose(fp);
      }
    Qui il problema è che se il file non esiste tutto ok, mi dice che non esiste e torna al menù principale, se invece esiste, non mi legge niente, ma mi stampa a schermo solo una serie di numeri. Invece se inserisco alcuni nomi e poi voglio visualizzare la lista (senza uscire e riaprire il programma) mi compare il nome, il cognome, la classe, e poi una serie di numeri al posto dei voti.
    Può essere che devo mettere "d" al posto di "u"? Ma così facendo i voti non saranno più come unsigned int ma semplicemente int, sbaglio?

    Se serve il codice completo lo posto dopo.

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Originariamente inviato da giova212
    ... non mi legge niente ...
    Ma quali sono le istruzioni che usi per leggere dal file ? Non le vedo ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it L'avatar di Stoicenko
    Registrato dal
    Feb 2004
    Messaggi
    2,254
    mi sa che dovresti studiare un po' di più il tuo libro sul C prima di avventurarti in esercizi del genere..

  8. #8
    Utente di HTML.it
    Registrato dal
    Jul 2009
    Messaggi
    33
    Come si fa a leggere dal file allora? Ho guardato alcuni esercizi già svolti e tutti sono scritti così, anzi hanno un ciclo for che non ho scritto
    codice:
      int visualizza (struct pagelle elenco_pagelle[], int n) {                     //Serve a visualizzare i dati già inseriti
      int i;
      int scelta;
          FILE*fp=fopen(FILE_PRED,"r");
          if(fp==NULL) {
               printf("-----Errore di lettura. Il file non esiste-----\n");
               return (scelta);
               }
          else {
               for(i=0;i<n;i++){
               printf("Ecco gli studenti presenti in elenco:\n\n");
               printf("%s %s %s %u %u %u %u\n",elenco_pagelle[i].nome,elenco_pagelle[i].cognome,elenco_pagelle[i].classe,elenco_pagelle[i].italiano,elenco_pagelle[i].matematica,elenco_pagelle[i].informatica,elenco_pagelle[i].religione);           return 0;}
               }
          fclose(fp);
          return 0;
      }

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Ti ripeto la mia domanda ... quali sono le funzioni per leggere da un file che hai utilizzato nel tuo programma?

    Riguarda gli esercizi gia' svolti molto attentamente ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304

    Moderazione

    Ti avevo già invitato in questa discussione a prendere visione del regolamento interno, ma forse non sono stato sufficientemente chiaro. C'è un regolamento interno che indica esattamente come vanno scritti i titoli delle discussioni.

    "Aiutatemi a fare l'esercizio" oltre ad essere una richiesta inammissibile (gli esercizi si fanno da soli, al massimo puoi chiedere aiuto su una parte che non ti riesce o su degli errori, ecc), non è nemmeno un titolo che faccia capire il contenuto della discussione.

    Lo modifico io anche questa volta.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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 © 2024 vBulletin Solutions, Inc. All rights reserved.