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

Discussione: [C++]Problema FILE

  1. #1

    [C++]Problema FILE

    CIao raga, ho iniziato a scrivere questo semplice programma RUBRICA TELEFONICA, ma quando lo compilo, va' tutto bene, invece quando lo esegue, quando premo l'ultimo invio per inserire l'indirizzo e-mail, mi dice di fare la segnalazione errori a windows.
    codice:
    # include <iostream>
    # include <stdio.h>
    # include <stdlib.h>
    # include <cstdio>          // Per la funzione fseek   
    # include <fstream>
    
    using namespace std;
    
    FILE *w,*r;
    typedef char NOME;
    typedef char COGNOME;
    typedef char NUMERO;
    typedef char MAIL;
    
    struct rubrica {
                   NOME    nome;
                   COGNOME cogn;
                   NUMERO  numero;
                   MAIL    mail;
                   };
    
    void inizia(void);
    struct rubrica aquisizione();
    void scrittura(struct rubrica A, FILE* w);
    
    int main()
    {
      int scelta;
      struct rubrica A[1];
      cout << "RUBRICA telefonica\n"<<endl;
      cout << "1) Inizia Rubrica "<<endl;
      cout << "2) Aggiungi Contatti "<<endl;
      cout << "3) Visualizza contatti "<<endl;
      cout << "4) Esci "<<endl;
      cin>> scelta; 
      
      if (scelta==1)
                    {
                     w = fopen("Rubrica.txt","w");          
                     inizia();
                     A[0]=aquisizione(); 
                     scrittura(A[0],w);      
                    }
      if (scelta==2)
                    {
                           
                    } 
      if (scelta==3)
                    {
                           
                    } 
      fclose(w);                                        
      system("PAUSE");  
    }
    //------------------------------------------------------------------------------
    void inizia()
    {  
     fputs ( "NOME" , w );
     fseek ( w , 20 , SEEK_SET ); // Sposta il cursore dall'inizio del File di 20 byte
     fputs ( "|COGNOME" , w );
     fseek ( w , 41 , SEEK_SET );
     fputs ( "|NUMERO" , w );
     fseek ( w , 55 , SEEK_SET );
     fputs ( "|E-MAIL" , w );    
    }
    //------------------------------------------------------------------------------
    struct rubrica aquisizione()
    {
     struct rubrica A;  
     printf("Inserisci il nome :\n");
     scanf("%s",&A.nome);
     printf("Inserisci il cognome :\n");
     scanf("%s",&A.cogn);
     printf("Inserisci il numero :\n");
     scanf("%s",&A.numero);
     printf("Inserisci l' e-mail :\n");
     scanf("%s",&A.mail);
     return A;
    }
    //------------------------------------------------------------------------------
    void scrittura(struct rubrica A, FILE* w)
    {    
     fprintf(w, "%-20s",A.nome);
     fprintf(w, "%-20s",A.cogn);
     fprintf(w, "%-14s",A.numero);    
     fprintf(w, "%-20s\n",A.mail);
     fflush(w);
    }

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Beh certo perché il campo mail della tua scruct è dichiarato come tipo MAIL, e questo a sua volta è un char (stando alla typedef che hai scritto), quindi è chiaro che poi il programma vada in crash se provi ad assegnare a questo campo un'intera stringa (l'indirizzo e-mail).

    Questo è un errore abbastanza evidente che ho notato senza compilare, poi se ce ne sono altri caso mai ricontrollo dopo che hai corretto questo.

    EDIT: ah, stessa cosa anche per nome e cognome... è strano che non ti dia problemi anche su quelli.
    every day above ground is a good one

  3. #3
    Ma va' in crash anche se inserisco sempre 'a'.
    Ad esempio:
    nome= a
    cogn= a
    numero = a;
    mail = a.

    penso ke ci deve essere un altro errore

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Stai provando a leggere da tastiera dei valori di tipo char (secondo la definizione che hai dato nella struct) con il codice di formato %s delle stringhe.

    Ridefinisci NOME, COGNOME e MAIL come char[30] (ad esempio), così hai una stringa di 30 caratteri da leggere e non un singolo carattere. Anzi, "numero" sarebbe il numero di telefono? Se è cosi devi definire come stringa di caratteri anche il tipo "NUMERO".
    every day above ground is a good one

  5. #5
    ho risolto, bastava aggiungere NOME[20]; ecc ecc
    codice:
    typedef char NOME[20];
    typedef char COGNOME[20];
    typedef char NUMERO[14];
    typedef char MAIL[40];

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da Salvatore_91
    ho risolto, bastava aggiungere
    Ovvero, hai seguito il consiglio che ti ha dato YuYevon ... cioe', hai risolto GRAZIE al suo intervento ... giusto?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Originariamente inviato da oregon
    Ovvero, hai seguito il consiglio che ti ha dato YuYevon ... cioe', hai risolto GRAZIE al suo intervento ... giusto?
    Vabbè non c'è problema oregon ^^

    Consiglierei piuttosto una notevole revisione del codice... programmare in C++ dovrebbe significare ricorrere alle caratteristiche tipiche di questo linguaggio (tanto per cominciare, le operazioni di I/O e la gestione dei file), magari evitando in questo modo anche l'inclusione dei vecchi header stile C.
    every day above ground is a good one

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da YuYevon
    programmare in C++
    Tutti i suoi codici sono, in realta', in C ... probabilmente indica C++ nei titoli per errore ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Originariamente inviato da oregon
    Tutti i suoi codici sono, in realta', in C ... probabilmente indica C++ nei titoli per errore ...
    Beh qui si vede anche qualche cout e perfino un esemplare di cin x°D
    every day above ground is a good one

  10. #10
    si, avete ragione ragazzi

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.