Krishnadas PC
Krishnadas PC

Reputation: 6519

Word count program not working. Code sample From the Book The C-programming Language Ritchie & Kernighan

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

Answers (2)

Anil Beniwal
Anil Beniwal

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

P.P
P.P

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

Related Questions