Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2014
    Messaggi
    78

    leggi date da file linguaggio c++

    Salve di nuovo forum,avrei di nuovo bisogno del vostro prezioso aiuto.
    Vi presento prima il programma altrimenti non si capisce nulla.

    Il file nomi.txt contiene un elenco di nomi e cognomi uno per riga preceduto da una data di nascita:
    es

    1990 tizio caio
    1992 caio sempronio
    1994 paolo rossi
    1990 aldo giovanni de giacomo

    Il programma che devo scrivere in c++ deve leggere da ogni riga il numero corrispondente all'anno
    ed estrarre dal file nomi.txt i nomi e cognomi delle persone in tale anno,visualizzandole a schermo.

    ES. Digita un anno da tastiera:1992
    caio sempronio
    aldo giovanni de giacomo

    Qui di seguito vi presento il mio codice...ovviamente mi da problemi..quello che mi chiedo perchè non è mai verificata la condizione anno_cercato=anno_letto infatti nel ciclo if non ci entra proprio

    basta con le chiacchiere...
    codice:
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #define N 10
    
    void visualizza_nati_nel(int anno_cercato,FILE *f);
    int main()
    {
        FILE*f;
        char nf[10];
        int anno_cercato;
        
        printf("Digitare il nome del file da aprire:");
        scanf("%s",nf);
        f=fopen(nf,"r");
        if(f==NULL)
        {
          printf("Errore caricamento file");
          printf("\n");
          return 0;
        }
        printf("Digitare l'anno da cercare:");
        scanf("%d",&anno_cercato);
        visualizza_nati_nel(anno_cercato,f);
        
    system("pause");
    }
     
     void visualizza_nati_nel(int anno_cercato,FILE *f)
     {
     
      int anno_letto;
      /*char nome_letto[N];*/
      int i;
      char ch;
      
                             
     
       
       while(fscanf(f,"%d",&anno_letto)!=EOF)
       if(anno_cercato == anno_letto)
       {
           fscanf(f,"%d",stdout);
           fgetc(f);             
           while((ch=fgetc(f))!='\n'
           fprintf(f,"%c",stdout);
           fprintf(f,\n,stdout);
       }
       else
       
       printf("?");/* devo trovare qualche istruzione per poter saltare la riga*/
       }
    Ultima modifica di SSSS90; 31-03-2014 a 20:08

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ma cosa vuol dire questa

    fscanf(f,"%d",stdout);

    ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2014
    Messaggi
    78
    niente appunto..non ci vuole..
    Rispiego meglio il problema che ho al momento:
    1)Inserisco il nome del file da tastiera
    2)inserisco l'anno da tastiera:1992
    Fin qui tutto ok
    3)Mi stampa un'infinità di punti interrogativi..spero di essere stato un qubit più chiaro....
    Ultima modifica di SSSS90; 31-03-2014 a 23:23

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ma devi spiegare il codice che hai mostrato ... sai leggere da file? Usa la fscanf per l'anno e la fgets per il resto della riga.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2014
    Messaggi
    78
    Questo codice sembra funzionare,ma non ho molta confidenza con le funzioni fgetc e putchar..secondo te avrei potuto fare la stessa cosa usando fscanf e frpintf..se si come?


    codice:
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #define N 10
    
    void visualizza_nati_nel(int anno_cercato,FILE *f);/
    int main()
    {
        FILE*f;
        char nf[10];
        int anno_cercato;
        
        printf("Digitare il nome del file da aprire:");
        scanf("%s",nf);
        f=fopen(nf,"r");
        if(f==NULL)
        {
          printf("Errore caricamento file");
          printf("\n");
          return 0;
        }
        printf("Digitare l'anno da cercare:");
        scanf("%d",&anno_cercato);
        visualizza_nati_nel(anno_cercato,f);
        
    system("pause");
    }
     
     void visualizza_nati_nel(int anno_cercato,FILE *f)
     {
     
      int anno_letto;
      char nome_letto[N];
      int i;
      char ch;
      
                             
     
       while(feof(f)==0)
       {
       fscanf(f,"%d",&anno_letto);
       if(anno_cercato==anno_letto)
       {
           
           fgetc(f);                                 /* acquisisco il carattere spazio*/
           while(((ch=fgetc(f))!=EOF) &&( ch!='\n'))/*acquisisco la parte restante della riga fino a che  non raggiungo \n*/
           putchar(ch);                             /*Visualizzo a video la prima riga*/
           putchar('\n');                           /*passo alla riga successiva*/                                 
       }
       else
            
       while(((ch=fgetc(f))!=EOF) &&( ch!='\n'))   /*salto  la riga nel caso in*cui anno_cercato!=anno_letto*/
            {
             
            }
            
       }
       }
    Ultima modifica di SSSS90; 01-04-2014 a 09:25

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2014
    Messaggi
    78
    Si so leggere da file e scrivere su file o per lo meno lo so fare nel modo in cui è richiesto dal programma del corso ,infatti uso prevalentemente fscanf e fprintf..le funzioni che ho usato li non mi sono molto familiari...(intendo fgetc e putchar)
    Ultima modifica di SSSS90; 01-04-2014 a 09:48

  7. #7
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Nel titolo fai riferimento a C++ però stai usando del normalissimo C...
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Perché non segui quello che ti ho scritto ... ?

    Per l'ultima volta ... la fscanf per l'anno e la fgets per il resto della linea.

    Se poi usi il C++ le cose cambiano ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Utente di HTML.it
    Registrato dal
    Mar 2014
    Messaggi
    78
    Ciao oregon,in che senso se usi c++ le cose cambiano?Quali sono le differenze ?

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Le differenze tra il C e il C++ non si indicano in un messaggio in un forum, ci sono libri appositi e con tante pagine ...

    Tu programmi in C o in C++?
    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.