Counting characters in C language

Join the discussion
Ask a follow-up here, or get your own question answered by working scientists, mathematicians and engineers — people, not an autocomplete.
Real named experts · corrections over time · the nuance an AI answer skips
9 replies · 4K views
physics kiddy
Messages
135
Reaction score
1
Please explain what this C code will do :

#include <stdio.h>
/* count characters in input; 1st version */
main()
{
long nc;
nc = 0;
while (getchar() != EOF)
++nc;
printf("%ld\n", nc);
}

'The C Programming' Book says that this code counts characters but it doesn't do the same ... why ?
Thanks
 
Physics news on Phys.org
I assume you have compiled it and you have seen numbers printed by the program. What were they?

Place your programs in [noparse]
Code:
[/noparse] tags to make them easier to read:

Code:
#include <stdio.h>
/* count characters in input; 1st version */
main()
{
  long nc;
  nc = 0;
  while (getchar() != EOF)
    ++nc;
  printf("%ld\n", nc);
}
 
When I type in anything, say, any number or any character, it just displays the character or whatever once again in the next line. I expect the program to count the number of characters I have typed. Like :

If I type 'Physics', it must count the number of characters(7) in the word Physics. But it does do that...
 
physics kiddy said:
When I type in anything, say, any number or any character, it just displays the character or whatever once again in the next line. I expect the program to count the number of characters I have typed. Like :

If I type 'Physics', it must count the number of characters(7) in the word Physics. But it does do that...

Try typing some characters and ending it with control-z.
 
It'll do, but you have to finish the input with EOF - end of file marker.

Under Linux (or any other *nix) it means entering your text, then pressing Ctrl-D. I think in Windows command line it'll be Ctrl-Z.

Edit: uart beat me. That's what happens when you google to check if it really is Ctrl-Z.
 
For Windows , pressing f6 gives the same result (EOF marker).
 
You can test what character is the program expect:
Code:
main()
{
long nc;
nc = 0;

printf("%c\n",EOF);   //Here output nothing

while (getchar() != EOF)
++nc;
printf("%ld\n", nc);     //Never be executed
}
As we saw output EOF is nothing,so none of inputs would be terminated while loop.
getchar() accept a character,which can be present as an ASCII code(One byte,Range:0~255).
But,EOF means of "End Of File",the value is -1.which used to judge when reading a file.

So,this program could be one part of file reading function,and exactly counts characters in file.
 
I`m wrong,Ctrl-Z(or F6) worked.