Program do zliczania znaków z klawiatury

0

Napisałem program do zliczania znaków, ale nie wiem gdzie jest błąd, bo wpisuje znaki i nie chce mi zliczyć :(((

#include <stdio.h>
#include <stdlib.h>
//#include <conio.h>

int main(int argc, char *argv[])
{
	int c=0, nc=0, nml=0, nwl=0, nb=0, nw=0, ns=0;
	fflush (stdin);
	 c=getchar();
	while ((c = getchar ()) && c!= EOF)
{	
if (c >= 'a' && c <= 'z')
    nml++;
if (c >= 'A' && c <= 'Z')
    nwl++;
if (c >= '0' && c <= '9')
	nc++;
if (c==' ' || c =='\t')
    nb++;
if (c=='\n')
    nw++;
}
	printf("Liczba cyfr: %d\n",nml);
	printf("Liczba malych liter: %d\n",nc);
	printf("Liczba duzych liter: %d\n",nwl);
	printf("Liczba bialych znaków: %d\n",nb);
	printf("Liczba wierszy: %d\n",nw);
	printf("Liczba wszystkich znakow: %d\n",nc+nml+nwl+nb+nw);

//printf("\n");
 system("PAUSE");
 return 0;
} 
1

c!= EOF
CTRL+Z; Musisz postawić znak końca pliku.

0

EOF jest to znak końca pliku, nie będzie się komponować z getchar(), oprócz tego w czasie wyświetlania pomyliłeś zmienne:

 
//tak powinno być
    printf("Liczba cyfr: %d\n",nc);
    printf("Liczba malych liter: %d\n",nml);
    printf("Liczba duzych liter: %d\n",nwl);
    printf("Liczba bialych znaków: %d\n",nb);
    printf("Liczba wierszy: %d\n",nw);
    printf("Liczba wszystkich znakow: %d\n",nc+nml+nwl+nb+nw);

Ogólnie to proponuje to zrobić inaczej, stracisz możliwość wyświetlania ilości wierszy, ale wszytko będzie działać, po prostu w czasie wklepywania tekstu, nie wciskaj entera:

 
#include <stdio.h>
#include <stdlib.h>
//#include <conio.h>

int main(int argc, char *argv[])
{
    int c=0, nc=0, nml=0, nwl=0, nb=0, nw=0, ns=0;
    fflush (stdin);

    //c=getchar(); ta linijka jest zbędna

    while ((c = getchar ()) && c!= '\n')
    {
        if (c >= 'a' && c <= 'z')
            nml++;
        if (c >= 'A' && c <= 'Z')
            nwl++;
        if (c >= '0' && c <= '9')
            nc++;
        if (c==' ' || c =='\t')
            nb++;
        if (c=='\n')
            nw++;
    }
    printf("Liczba cyfr: %d\n",nc);
    printf("Liczba malych liter: %d\n",nml);
    printf("Liczba duzych liter: %d\n",nwl);
    printf("Liczba bialych znaków: %d\n",nb);
    printf("Liczba wierszy: %d\n",nw);
    printf("Liczba wszystkich znakow: %d\n",nc+nml+nwl+nb+nw);

//printf("\n");
 system("PAUSE");
 return 0;
}
1
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
 
int main()
  {
   int c=0,upper=0,lower=0,digit=0,space=0,lines=0,chars=0;
   while((c=getchar())!=EOF)
     {
      digit+=isdigit(c)?1:0;
      lower+=islower(c)?1:0;
      upper+=isupper(c)?1:0;
      space+=isspace(c)?1:0;
      lines+=(c=='\n');
      ++chars;
     }
   printf("Liczba cyfr: %d\n",digit);
   printf("Liczba malych liter: %d\n",lower);
   printf("Liczba duzych liter: %d\n",upper);
   printf("Liczba bialych znaków: %d\n",space);
   printf("Liczba wierszy: %d\n",lines);
   printf("Liczba wszystkich znakow: %d\n",chars);
   // while(getchar()!='\n') {} - jeżeli potrzebujesz tego wiersza to zmień lepiej IDE na jakieś z tego tysiąclecia.
   return 0;
  }

Można jeszcze tak:

#include <stdio.h>
#include <ctype.h>

int isline(int ch) { return ch=='\n'; }
 
int main()
  {
   static struct { const char *name; int (*check)(int); size_t count; } Tb[]=
     {
         {"cyfr",&isdigit},
         {"malych liter",&islower},
         {"duzych liter",&isupper},
         {"bialych znaków",&isspace},
         {"wierszy",&isline},
         {"wszystkich znakow",0,0}
     };
   int c,i;
   for(i=0;(c=getchar())!=EOF;++Tb[i].count) for(i=0;Tb[i].check;++i) if(Tb[i].check(c)) ++Tb[i].count;
   for(i=0;i<sizeof(Tb)/sizeof(*Tb);++i) printf("%d - %s\n",Tb[i].count,Tb[i].name);
   return 0;
  }

1 użytkowników online, w tym zalogowanych: 0, gości: 1