Question

I'm working my way through K&R's 2nd edition, and I've been stumped with this seemingly simple example:

#include <stdio.h>

main(){
    double c;
    for(c = 0; ((getchar() != EOF) && (getchar() != '\n')); ++c)
        ;
    printf("%.0f\n",c);
}

It simply isn't working correctly. I added in the (getchar() != '\n') portion to end the program when I press enter, but that doesn't really help either.

Here's some sample output, using the gcc that comes with Mac OSX 10.6 dev tools.

pool-000:Desktop user$ ./a.out 
a
0
pool-000:Desktop user$ ./a.out 
asdf

2
pool-000:Desktop user$ ./a.out 
asfasf

3

So something is obviously wrong. I'm on page 18, if that helps. This isn't homework, this is for fun!

Thanks :)

Was it helpful?

Solution

Each call to getchar() will wait for a character to be read, so you're reading more than you think per iteration of the loop.

Also, at least in my opinion, a counter is (almost) never a double, you should use an integer type such as plain old int.

OTHER TIPS

The problem with doing two "getchar()" operations is that you will read TWO get chars in the conditional test... before you get to the ++c.

Ditch the "EOF" comparison and it should work as you expect.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top