Visualizzazione dei risultati da 1 a 7 su 7

Discussione: [C]Chiarimenti fscanf

  1. #1

    [C]Chiarimenti fscanf

    Raga vi propongo questo pezzetto di codice scritto da me. Tralascio le funzioni perchè il programma funge perfettamente e la mia domanda riguarda solamente l'fscanf. Le righe da prendere in input dal file di testo sono in questo formato:
    1A3F;Pomodori;230S34;Insalata;150S34;Insalata;5F34 5;Patate;3004C3;Carote;1804C3;Carote;71267;Salmone ;1

    In pratica il primo codice a 4 cifre è l'identificativo, poi c'è la descrizione, quindi la quantità (nel primo caso la quantità dei pomodori è 23 e subito dopo inizia il seguente codice identificativo a 4 cifre (0S34)). Come vedete nel mio fscanf dico "prendi 5 caratteri sino al punto e virgola, poi 256 caratteri sino al punto e virgola e quindi un intero e passa alla nuova linea. Perfetto, ma come fa a sapere che l'intero si ferma a 23 (nel caso sempre dei pomodori) e non a 230 (dove 0 è il primo numero dell'identificativo seguente)? Nelle carote addirittura la quantità è di una cifra (7) e subito dopo l'intero è riferito al salmone. Potete illuminarmi?

    codice:
    int main(int argc, char *argv[])
    {
        //PUNTO 1
      FILE* fp;
      fp=fopen("dispensa.txt", "r");
      if (fp==NULL){
      printf ("Errore nell'apertura del file");
      return 0;}
      
      nodo il=NULL;
      nodo p3=NULL;
      char idi[5]; char descr[256]; int quant;
      while(!feof(fp)){
      
      
      fscanf(fp,"%5[^;];%256[^;];%d\n",idi,descr,&quant);
      il=ricercanodo(p3,idi);
         
           if(il==NULL){
           il=malloc(sizeof(struct dispensa));
            
           strcpy(il->id,idi);
           il->desc=malloc(sizeof(char)*(strlen(descr)+1));
           strcpy(il->desc,descr);
           il->quantita=quant;
           il->succ=NULL;
           p3=inseriscicoda(p3,il);}
           else {
                il->quantita+=quant;}}
        fclose(fp);
        stampadispensa (p3);

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Stai aprendo il file con notepad su Windows?
    every day above ground is a good one

  3. #3
    E' un comune file .txt aperto con blocco note.

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ma perché viene generato in questo modo? Ovvero, perché non c'è un separatore a fine linea?

    Non è che, per caso, c'è un LF o altro carattere non visibile?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    È probabile che tu non veda che il contenuto è diviso su più righe perché queste sono separate dal semplice '\n' e non dal fine riga di Windows che è '\r\n', e notepad non legge il semplice carattere di new line feed ('\n') come separatore di riga, mostrandoti di fatto tutto su una sola riga (non so se c'è qualche opzione per fargli digerire anche il solo \n). Prova ad aprirlo con un editor di testo decente come notepad++ e vedi se c'è differenza.
    È solo un'ipotesi dato che, per come è scritto il codice, se il risultato che ottieni è quello che dici deve essere per qualcosa del genere.
    every day above ground is a good one

  6. #6
    Hai ragione YuYevon, cone notepad++ mi dà la nuova riga. Il file l'ho scaricato dalle dispense dell'università, ecco perchè era impostato così grazie mille!

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Prego
    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.