Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2008
    Messaggi
    19

    C++ sscanf e string

    Ciao,
    ho un problema con sscanf:
    ho un file .dat con una data, 8 numeri e un'altra data.
    Le date sono in formato gg/mm/hhhh.

    Voglio andar a scrivere il file da un'altra parte e lo leggo riga per riga.
    I numeri sono dichiarati double, le date char [1];

    Il pezzo di codice incriminato è:

    codice:
     
    while (fgets(&line,100,fdat)) 
    {     sscanf(&line[0],"%s%f%f%f%f%f%f%f%f%s",    
             &PROVA.Data1,    
             &PROVA.Continente,    
             &PROVA.Nazione,    
             &PROVA.Regione,    
             &PROVA.Citta,    
             &PROVA.Borgo,   
             &PROVA.Via,    
             &PROVA.Palazzo,    
             &PROVA.Piano,    
             &PROVA.Data2);  }
    Il problema è il seguente:
    sembra che non riesca a gestire la lunghezza della prima data (Data1).

    Infatti, se provo a sostituire la lettera "a" al posto della prima data, lui scrive tutto correttamente, anche l'ultima data.



    Nel momento in cui scrivo la prima data, in uscita ho solo i primi caratteri (es: 12/01/2010 esco scritto solo 12/0).

    Qualche idea?

    Grazie dell'aiuto.

  2. #2
    Utente di HTML.it
    Registrato dal
    Mar 2008
    Messaggi
    19
    Ok,
    ho trovato un barbatrucco per aggirare (attenzione, non risolvere, aggirare) il problema e lo metto qui, nel caso qualcuno ne avesse bisogno in futuro:

    codice:
    while (fgets(&line,100,fdat)) 
    {     
    strncpy (&PROVA.Data1[0],&line[0],10);   
      
    sscanf(&line[11],"%f%f%f%f%f%f%f%f%s",    
       &PROVA.Continente,    
       &PROVA.Nazione,    
       &PROVA.Regione,    
       &PROVA.Citta,    
       &PROVA.Borgo,    
       &PROVA.Via,    
       &PROVA.Palazzo,     
       &PROVA.Piano,    
       &PROVA.Data2);  
    }
    In pratica, sto forzando (con strncpy) i primi 10 caratteri del file a finire in Data1 (che è diventato un array da 10 posti); tutto il resto va come prima con sscanf.

    Se qualcuno ha un'idea migliore, è più che ben accetta!!!

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