|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Jul 2008
Messaggi: 27
|
[C] Conta caratteri, parole e linee
Ciao a tutti. Non mi esce questo programma che va in loop infinito nel while, questo programma conta i caratteri, le parole e le linee di un file di testo, uso come programma "DEV-C++ 4.9.9.2" non capisco il motivo che non esce è strano perchè modificando "c=fgetc(nPtr);" in "c=getchar();" funziona benissimo, mentre con "c=fgetc(nPtr);" va in loop.
Secondo voi quale potrebbe essere il problema? Grazie a tutti! Qui il codice: Codice:
#include <stdio.h>
#include <stdlib.h>
typedef enum{FALSO,VERO}BOOLEAN;
/*prototipo di funzione*/
BOOLEAN test(int c);
int main()
{
int c;/*carattere*/
int d;/*locazione penultimo carattere*/
int nParole=0;/*contatore parole*/
int nLinee=0;/*contatore linee*/
int nCaratteri=0;/*contatore caratteri*/
BOOLEAN is=0,fineParola=VERO;/**/
FILE *nPtr;/*creo un puntatore a un file*/
/*apri il file, se non puo' essere aperto esci dal programma*/
if((nPtr=fopen("testo.txt","r+"))==NULL){
printf("Il file non puo' essere aperto.");
}
else{
c=fgetc(nPtr);/*prende un carattere dal file e lo salva in c*/
++nCaratteri;/*incrementa il numero di caratteri*/
/*se il carattere e' un EOF esci*/
while(c!=EOF){
fineParola=VERO; /*inizializzo fine parola a TRUE*/
/*leggi i caratteri di una linea e individua le parole*/
while(c!='\n'){
/*verifica se il carattere letto e' un separatore*/
is=test(c);
/*se il carattere e' un separatore e l'ultima parola non e' terminata incrementa il numero di parole*/
if(is&&!fineParola){
nParole++;
fineParola=VERO;
}
/*altrimenti se il carattere letto non e' un separatore assegna a fineParola FALSO*/
else if(!is){
fineParola=FALSO;
}
/*salva il penultimo carattere in d*/
d=c;
c=fgetc(nPtr);/*legge un carattere dal file e lo salva in c*/
++nCaratteri;/*incrementa nCaratteri*/
} /*fine del comendo while*/
++nLinee;/*incrementa nLinee*/
is=test(d);/*controlla che il penultimo carattere sia un separatore*/
/*se non e' un separatore incrementa nParole*/
if(!is){
nParole++;
}
/*se la parola e' terminata ed e' un separatore incrementa nParole*/
else if(is&&!fineParola){
nParole++;
}
c=fgetc(nPtr);
}/*fine del comando while*/
/*stampa il numero di parole, di caratteri e di linee*/
printf("Le parole sono=%d\n",nParole);
printf("I caratteri sono=%d\n",nCaratteri);
printf("Le linee sono=%d\n",nLinee);
fclose(nPtr);/*il file viene chiuso*/
}
system("PAUSE");
return 0;
}
/*restituisci TRUE se c'è un separatore altrimenti false*/
BOOLEAN test(int c)
{
BOOLEAN ris;
ris=(c==' ')||(c=='\t')||(c=='.')||(c==';')||(c==',');
return ris;/*ritorna VERO o FALSO*/
}/*fine della funzione test*/
|
|
|
|
|
|
#2 |
|
Junior Member
Iscritto dal: Jul 2008
Messaggi: 27
|
Che strano ho provato ad eseguirlo e adesso funziona
|
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Nov 2004
Città: Padova
Messaggi: 2342
|
Quote:
e mi sono messo a usare il borland Quando ti capitano ste cose, prova anche con altri compilatori.
__________________
CPU Ryzen 2600 @ 3,95Ghz + Bequiet Dark Rock TF / MB Asus X470-F Gaming / RAM 2x8GB DDR4 G.Skill FlareX 3200 CL14 / VGA Sapphire RX 7900 XT Nitro+ @ 3200Mhz / SSD Samsung 970 Pro 512GB + Sandisk 240GB Plus + Sandisk 960GB Ultra II PSU Seasonic Platinum P-660 / Headset Kingston HyperX Flight |
|
|
|
|
|
|
#4 |
|
Junior Member
Iscritto dal: Jul 2008
Messaggi: 27
|
Grazie mille!
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 21:51.




















