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: 6402
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: 6402
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: 6402
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