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++ - Contarighe e stampa. Cosa c'è che non va?
Forum - C/C++ - Contarighe e stampa. Cosa c'è che non va?

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
shube (Normal User)
Newbie


Messaggi: 6
Iscritto: 26/06/2011

Segnala al moderatore
Postato alle 13:41
Domenica, 26/06/2011
Il seguente programma dovrebbe contare le righe e stampare il contenuto di "data". Invece mi viene fuori questo:
1 4 12
3 12 93
12 5 99
1 4 12
0 6386785 -1075038064
1 4 12
9 0 93
9 5 99
1 4 12

****************
CONTENUTO "data"
****************
01.04.12
03.12.93
12.05.99
01.04.12
09.09.09

*****************
PROGRAMMA
*****************

PM Quote
Avatar
shube (Normal User)
Newbie


Messaggi: 6
Iscritto: 26/06/2011

Segnala al moderatore
Postato alle 13:43
Domenica, 26/06/2011
Codice sorgente - presumibilmente C++

  1. /* LETTURA FILE DI TESTO */
  2. #include <stdio.h>
  3. #include <string.h>
  4. int righe(char nf[]);
  5. int main()
  6. {
  7.    char nomefile[] = "data";
  8.    int r = righe(nomefile);
  9.    int data[r][3];
  10.    
  11.    FILE *f;
  12.    f=fopen(nomefile,"r");
  13.    
  14.    int i;
  15.    
  16.    i = 0;
  17.    while(!feof(f)){
  18.      fscanf(f, "%i.%i.%i\n", &data[i][0],&data[i][1],&data[i][2]);
  19.      printf("%i %i %i\n", data[i][0],data[i][1],data[i][2]);
  20.      i++;
  21.    }
  22.    fclose(f);
  23.    return 0;
  24. }
  25.  
  26. int righe(char nf[])
  27. {
  28.         int linee=0;
  29.         char c;
  30.         FILE*fl;
  31.         fl=fopen(nf,"r");
  32.         fseek(fl,0,0);
  33.         if (fl!=NULL)
  34.         {
  35.                 while(fscanf(fl,"%c",&c)!=EOF)
  36.                 if(c=='n')
  37.                 linee++;       
  38.         }
  39.         fclose(fl);
  40.         return linee;
  41. }


Ultima modifica effettuata da shube il 26/06/2011 alle 13:44
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6379
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 13:58
Domenica, 26/06/2011
Fai attenzione a questa riga

if(c=='n')


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
Avatar
shube (Normal User)
Newbie


Messaggi: 6
Iscritto: 26/06/2011

Segnala al moderatore
Postato alle 14:05
Domenica, 26/06/2011
Quella riga è ok. Mi è bastato cambiare le %i con %d

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6379
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 14:09
Domenica, 26/06/2011
Quella riga NON è ok ...


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
Avatar
shube (Normal User)
Newbie


Messaggi: 6
Iscritto: 26/06/2011

Segnala al moderatore
Postato alle 14:12
Domenica, 26/06/2011
Mi sono corretto così:
Codice sorgente - presumibilmente C++

  1. /* LETTURA FILE DI TESTO */
  2. #include <stdio.h>
  3. #include <string.h>
  4. int righe(char nf[]);
  5.  
  6. int main()
  7. {
  8.    char nomefile[] = "data";
  9.    int r = righe(nomefile);
  10.    int data[r][2];
  11.    
  12.    FILE *f;
  13.    f=fopen(nomefile,"r");
  14.    
  15.    int i;
  16.    
  17.    i = 0;
  18.    while(!feof(f)){
  19.      fscanf(f, "%d.%d.%d\n", &data[i][0],&data[i][1],&data[i][2]);
  20.      printf("%d %d %d\n", data[i][0],data[i][1],data[i][2]);
  21.      i++;
  22.    }
  23.    fclose(f);
  24.    return 0;
  25. }
  26.  
  27. int righe(char nf[])
  28. {
  29.         int linee=0;
  30.         char c;
  31.         FILE*fl;
  32.         fl=fopen(nf,"r");
  33.         fseek(fl,0,0);
  34.         if (fl!=NULL)
  35.         {
  36.                 while(fscanf(fl,"%c",&c)!=EOF)
  37.                 if(c=='\n')
  38.                 linee++;       
  39.         }
  40.         fclose(fl);
  41.         return linee;
  42. }



Comunque non so... prova a dirmelo no? Magari ci capisco qualcosa pure io dato che sono alle prime armi. :pat:

forse è così?
Codice sorgente - presumibilmente Plain Text

  1. if(c=='\n')



Ultima modifica effettuata da shube il 26/06/2011 alle 14:15
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6379
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 14:15
Domenica, 26/06/2011
E' importante che tu capisca da solo, altrimenti non impari.

Hai controllato quanto vale

r

dopo che è stata eseguita la

int r = righe(nomefile);

?


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
Avatar
shube (Normal User)
Newbie


Messaggi: 6
Iscritto: 26/06/2011

Segnala al moderatore
Postato alle 14:17
Domenica, 26/06/2011
ok ora mi da 5 ;D grazie mille...

Ultima modifica effettuata da shube il 26/06/2011 alle 14:27
PM Quote
Avatar
Pitagora (Member)
Expert


Messaggi: 367
Iscritto: 12/06/2010

Segnala al moderatore
Postato alle 14:21
Domenica, 26/06/2011
Testo quotato

Postato originariamente da shube:

zero D: come mai?



Sbagli... Rivedi, le righe 36 37 38. Ah un consiglio, metti sempre le istruzioni in blocco, ove è possibile

{.....}

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo