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

Discussione: [C++] Scrittura FILE

  1. #1

    [C++] Scrittura FILE

    Ciao raga, ho fatto un semplice programma che dovrebbe scrivere su un file, e praticamente lo fa'.
    chiedo di inserire il nome, cognome,l'eta', la sezione della classe, e l'anno della classe.
    Mi mi stampa i campi relativi a uno sola persona tutti attaccati:
    ad esempio:
    CarloRusso17A4, anche se ho dichiarato il tracciato record.
    codice:
    # include <stdio.h>
    # include <stdlib.h>
    # include <string.h>
    
    using namespace std;
    typedef char   Eta[5];                // qui dichiaro il tracciato record
    typedef char   Sezione[4];       // qui dichiaro il tracciato record
    typedef char   Anno[4];       //
    typedef char   Nome[20];     //
    
    struct alunno {
            Nome       nome;
            Nome       cognome;
            Eta        eta;
            Sezione    sezione;
            Anno       anno;
    };
    struct alunno lettura_stdin();
    void scrittura_file(struct alunno a, FILE* w);
    
    
    int main(){
        
    int ris,n;
    struct alunno a[100];
    FILE *w, *r;
    w = fopen("test_2.txt","w");
    ris=0;
    
    while (ris!=3) 
          {
          printf("1) Inserisci l'alunno\n");
          printf("2) Immetti a video la lista di alunni\n");
          printf("3) Esci\n");
          scanf("%d",&ris);
          
          if (ris==1)
                     {
                     a[0]=lettura_stdin();
                     scrittura_file(a[0],w);
                     } 
          }
          printf ("sei uscito dal programma\n");
          fclose(w);
          system("pause");
    }
    
          struct alunno lettura_stdin(){
              struct alunno a;
              printf("inserisci il nome dell'alunno\n");
              scanf("%s",&a.nome);
              printf("inserisci il cognome dell'alunno\n");
              scanf("%s",&a.cognome);
              printf("inserisci l'eta dell'alunno\n");
              scanf("%s",&a.eta);
              printf("inserisci la sezione dell'alunno\n");
              scanf("%s",&a.sezione);
              printf("inserisci l'anno dell'alunno\n");
              scanf("%s",&a.anno);
              return a;
          }
          void scrittura_file( struct alunno a,  FILE* w){
                 fprintf(w, "%s",a.nome);                                      
                 fprintf(w, "%s",a.cognome);      
                 fprintf(w, "%s",a.eta);
                 fprintf(w, "%s",a.sezione);
                 fprintf(w, "%s\n",a.anno);
                 fflush(w);
          }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    E qual e' il problema?

    Se gli dici di scrivere nel file tutte le informazioni una di seguito all'altra, lui lo fa ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Si, ma avendo dichiarato:
    codice:
    typedef char   Eta[5];              
    typedef char   Sezione[4];       
    typedef char   Anno[4];      
    typedef char   Nome[20];
    Dovrebbe lasciare spazi vuoti, ad esempio se inserisco il nome: Marco
    Dovrebbe scrivere Marco, e poi dovrebbe lasciare 15 spazi vuoti (20-5= 15 , dato che "Nome[20]")??.
    Mi sbaglio??

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ti sbagli.

    Una stringa viene scritta fino al NULL. Gli spazi successivi vengono ignorati dalla fprintf
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    ah capito, e come potrei risolverlo??
    Ma in un File, mi posso muovore ad esempio come mi muovo sul video usando il Gotoxy().??

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da Salvatore_91
    ah capito, e come potrei risolverlo??
    Usando questo codice

    codice:
                 fprintf(w, "%-20s",a.nome);                                      
                 fprintf(w, "%-20s",a.cognome);      
                 fprintf(w, "%-5s",a.eta);
                 fprintf(w, "%-4s",a.sezione);
                 fprintf(w, "%-4s\n",a.anno);
    Studia la formattazione dell'output della printf (e della fprintf)

    Ma in un File, mi posso muovore ad esempio come mi muovo sul video usando il Gotoxy().??
    No ... studia la fseek per capire come muoverti in un file ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    ok, grazie mille.

  8. #8
    Scusami ancora, ho un'altro problema.
    Quando creo un nuovo file, cancellando quello precedente, va' tutto bene,
    invece quando voglio accodare al file altri "alunni" mi da errore di Windows dopo che ho premuto INVIO per l'ultimo inserimmento (cioe' quando inserisco l'anno e premo invio).
    codice:
    # include <iostream>
    # include <stdio.h>
    # include <stdlib.h>
    # include <string.h>
    using namespace std;
    typedef char   Eta[8];
    typedef char   Sezione[10];
    typedef char   Anno[8];
    typedef char   Nome[20];
    
    struct alunno {
            Nome       nome;
            Nome       cognome;
            Eta        eta;
            Sezione    sezione;
            Anno       anno;
    };
    struct alunno lettura_stdin();
    void scrittura_file(struct alunno a, FILE* w);
    
    int main(){
        
    int ris;
    struct alunno a[100];
    FILE *w, *r, *file;
    
    ris=0;
                        
    while (ris!=3) 
          {
          printf("1) Accoda l'alunno (Accodando l'alunno agli alunni gia' inseriti\n");
          printf("2) Inizia nuovo elenco (Cancellando gli alunni precedenti\n");
          printf("3) Esci\n");
          scanf("%d",&ris);
          
          if (ris==1)
                     {
                     r = fopen("test_2.txt","r");                                                          
                     a[0]=lettura_stdin();
                     scrittura_file(a[0],w);
                     }   
          if (ris==2)
                     {
                     w = fopen("test_2.txt","w");     
                     a[0]=lettura_stdin();
                     scrittura_file(a[0],w);
                     } 
          }        
          
          printf ("Sei uscito dal programma\n");
          fclose(w);
          system("pause");
    }
    
          struct alunno lettura_stdin(){
              struct alunno a;
              printf("Inserisci il nome dell'alunno\n");
              scanf("%s",&a.nome);
              printf("Inserisci il cognome dell'alunno\n");
              scanf("%s",&a.cognome);
              printf("Inserisci l'eta dell'alunno\n");
              scanf("%s",&a.eta);
              printf("Inserisci la sezione dell'alunno\n");
              scanf("%s",&a.sezione);
              printf("Inserisci l'anno dell'alunno\n");
              scanf("%s",&a.anno);
              return a;
          }
          void scrittura_file( struct alunno a,  FILE* w){
                 fprintf(w, "%-20s",a.nome);                                      
                 fprintf(w, "%-20s",a.cognome);      
                 fprintf(w, "%-8s",a.eta);
                 fprintf(w, "%-10s",a.sezione);
                 fprintf(w, "%-8s\n",a.anno);
                 fflush(w);
          }

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Se "accodi" al file dei dati, questo non puo' essere aperto in "lettura" ...

    r = fopen("test_2.txt","r");

    Quando usi delle funzioni che non conosci, prima studiale ...

    fopen
    http://www.cplusplus.com/reference/c...dio/fopen.html

    e cerca come si fa un "append" ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Ho messo:
    codice:
    ....
    FILE *w, *r, *file;
    ....
    ....
    file = fopen("test_2.txt","a+");
    ....
    ma mi da lo stesso problema

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.