Difficoltà con conteggio parole in C

gcappellotto
Salve a tutti
ho scritto un programma in C per il conteggio delle parole e dei caratteri e delle righe, però ci sono dei problemi in quanto non riesco a contare le righe

Ecco il listato:
/* Conta linee parole caratteri */

#include
#define IN 1 /* all'interno di una parola */
#define OUT 2 /* all'esterno di una parola */

main(void)
{
/*char frase[255];*/
int c,n1,nw,nc,state,i;
state = OUT;

n1=nw=nc=0;

printf("Inserisci la frase :\n");

while((c= getchar()) != '\n')
{
++nc;
if (c == '\n')
++n1;
printf("Numero righe %d\n",n1);
if (c == ' ' || c=='\n' || c=='\t')
state = OUT;
else if (state == OUT)
{
state = IN;
++nw;
}
}
printf("Numero lettere. parole caratteri. %d %d %d\n",n1,nw,nc-nw+1);

printf( "Premere INVIO per uscire...");

getchar();

}

Grazie a chi mi aiuterà
Giovanni C.

Risposte
karhel
#include<stdio.h>

main(void)
{
 char c,risp='s';          
 int nc=0,np=0,nr=0;
 printf("\n Inserisci il testo: ");
 while(risp!='n')
 {                 
  c=getchar();                
  if(c!=' ' && c!='\n')
   nc++;
  if(c==' ') 
   np++;
  if(c=='\n')                      
  {
   nr++;
   printf("\n Riepilogo: ");
   printf("\n Numero di caratteri: %d",nc);
   printf("\n Numero di parole: %d",np+1);
   printf("\n Numero di righe: %d",nr);
   nc=np=0;
   printf("\n\n\n Vuoi continuare? (s/n): ");
   risp=getchar();
   fflush(stdin);
   if(risp=='s')
    printf("\n Inserisci il testo: ");
  } 
 }
} 


beh se conti n1 dentro ad un while che si ferma esattamente quando lo incontra direi che non lo conterà mai

cmq ora funziona :D

luca981
oppure anche cosi dal file .
#include<stdio.h>
main()
{
char cf = 'a'; /*carattere definito prova */
printf("\til crattere predefinito e :  %c\n",cf);
printf("\til crattere predefinito e :  ");
putc(cf, stdout);
printf("\n");

FILE *fpSource;
   if((fpSource = fopen("righe.txt", "r")) != NULL)
   {
   int nl;        /*conteggio delle righe*/
   int ns;        /*conteggio dei spazzi*/
   int nc;        /*conteggio dei caratteri*/
   int np;        /*conteggio delle parole*/
   int stato;
   char ca;       /* carattere */
   nl = 0;
   ns = 0;
   nc = 0;
   np = 0;
   stato = 0;      /*OUT = 0 IN = 1*/

   while ((ca=fgetc(fpSource)) != EOF)
      { 
      ++nc;
      if (ca == '\n')
         {
         ++nl;
         }
      if (ca == ' ')
         {
         ++ns;
         }
      if (ca == ' ' || ca == '\n' || ca == '\t')
         ++np;
      }   
      printf("\ti caratteri sono :  %d\n", nc);
      printf("\tle righe sono :  %d\n", nl);
      printf("\tgli spazzi sono :  %d\n", ns);
      printf("\tle parole sono :  %d\n", np);
      rewind(fpSource);                          /*Posizionamento su uno stream*/
      printf("il testo e :\n");
      while ((ca=fgetc(fpSource)) != EOF)
           {  
              putc(ca, stdout);
           }
      printf("\n");
      rewind(fpSource);                          /*Posizionamento su uno stream*/
      printf("il testo e :\n");
      ca = 0;
      while ((ca=fgetc(fpSource)) != EOF)
           { 
              printf("%c",ca);   
           }
   }
   else
      {
         perror("Errore in apertura del file. \n");
      }
}

prova se ti piace ?

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.