Reputation: 6519
This is the code sample for the word counting program. But it's not working. When we execute it, after entering words it is supposed to display the results, but it is not producing anything.Anything missing in this code ?
#include<stdio.h>
#define IN 1 /* inside a word */
#define OUT 0 /* outside a word */
/* counts lines, words, and characters in input */
main()
{
int c, nl, nw, nc, state;
state = OUT;
nl = nw = nc = 0;
while( (c = getchar()) != EOF ){
++nc;
if( c == '\n' )
++nl;
if( c == ' ' || c == '\n' || c == '\t' )
state = OUT;
else if( state == OUT ){
state = IN;
++nw;
}
}
printf("%d %d %d\n", nl, nw, nc);
}
Upvotes: 0
Views: 1162
Reputation: 49
Here is my version This program in K&R counts other char as well but my version only count characters which are only alphabets. and yeah you have to press Ctrl+d to send EOF signal to this program to execute printf statement after while loop.
#include<stdio.h>
int main(){
int c = 0; // input variable
int lc = 0; // line count
int wc = 0; // word count
int cc = 0; // char count
int state = 0;// check space after word
while((c = getchar()) != EOF){
if(c == '\n'){
++lc;
}
if((c == ' ' || c == '\t' || c == '\n') && state == 1){
++wc;
state = 0;
}
else if((c >= 'A' || c>= 'a') && (c <='Z' || c <= 'z'){
//this is to count only character between A or a and Z or z
++cc;
state = 1;
}
}
printf("lc = %d\twc = %d\tcc = %d\n",lc,wc,cc);
}
Upvotes: -1
Reputation: 121387
Your code is fine. You have to ask yourself how to break the while loop as it continuously reading input i.e. how to send EOF
to your program.
On *nix systems, you do CTRL+D and on Windows you do CTRL+Z to generate EOF.
Also: use one of standard signature for main()
such asint main(void)
.
Upvotes: 4