Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - leggi date da tastiera
Forum - C/C++ - leggi date da tastiera

Avatar
pierotofy90 (Normal User)
Newbie


Messaggi: 1
Iscritto: 31/03/2014

Segnala al moderatore
Postato alle 23:56
Lunedì, 31/03/2014
Salve  forum,avrei  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 sorgente - presumibilmente C++

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4. #define N 10
  5.  
  6.  
  7. void visualizza_nati_nel(int anno_cercato,FILE *f);
  8.  
  9. int main()
  10. {
  11.     FILE*f;
  12.     char nf[10];
  13.     int anno_cercato;
  14.    
  15.     printf("Digitare il nome del file da aprire:");
  16.     scanf("%s",nf);
  17.     f=fopen(nf,"r");
  18.     if(f==NULL)
  19.     {
  20.       printf("Errore caricamento file");
  21.       printf("\n");
  22.       return 0;
  23.     }
  24.     printf("Digitare l'anno da cercare:");
  25.     scanf("%d",&anno_cercato);
  26.     visualizza_nati_nel(anno_cercato,f);
  27.    
  28. system("pause");
  29. }
  30.  
  31.  
  32.  
  33.  void visualizza_nati_nel(int anno_cercato,FILE *f)
  34.  {
  35.  
  36.   int anno_letto;
  37.   char nome_letto[N];
  38.   int i;
  39.   char ch;
  40.  
  41.                          
  42.  
  43.    
  44.    while(fscanf(f,"%d",&anno_letto)!=EOF)
  45.    if(anno_cercato==anno_letto)
  46.    {
  47.        
  48.        fgetc(f);
  49.        while(((ch=fgetc(f))!=EOF) &&( ch!='\n'))
  50.        putchar(ch);
  51.        fprintf(f,\n,stdout);
  52.    }
  53.    else
  54.    
  55.    printf("?");/* devo trovare qualche istruzione per poter saltare la riga*/
  56.    }


Ultima modifica effettuata da pierotofy90 il 31/03/2014 alle 23:57
PM Quote
Avatar
Roby94 (Member)
Guru


Messaggi: 1170
Iscritto: 28/12/2009

Segnala al moderatore
Postato alle 21:59
Mercoledì, 02/04/2014
A mio parere ti poni con un approccio sbagliato...
Sai che il file è composto da righe in formato "aaaa nome cognome", partiamo da questo... Le strade che si possono imboccare ora sono molte, per esempio un approccio con una regex che analizza riga per riga, oppure un confronto carattere per carattere dei primi 4 byte.
Per quanto riguarda il saltare la riga, basta che scorri in avanti fino al carattere "\n" o EOF

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 22:13
Mercoledì, 02/04/2014
Da qualche altra parte ti è stato detto di usare fscanf e fgets per leggere i dati ...


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote