Counting characters in C language

AI Thread Summary
The C code provided is designed to count the number of characters inputted until an End Of File (EOF) signal is received. The program initializes a counter and uses a while loop to read characters one by one with the `getchar()` function. The loop continues until EOF is detected, incrementing the counter for each character read. The final count is printed.However, confusion arises when users expect the program to count characters immediately after typing, as it does not display output until EOF is signaled. Users must end their input with Ctrl-D on Unix/Linux or Ctrl-Z (or F6) on Windows to trigger EOF. Without this, the program does not execute the print statement, leading to misunderstandings about its functionality. The discussion emphasizes the importance of understanding how EOF works in the context of character input and program execution.
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
 
Technology news on Phys.org
The code should do what it says it will do. You need to be more specific about what your problem is.
 
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);
}
 
Please tell us:

1. a sample input to the program
2. what you expected the output to be
3. the actual output

This is more precise and helpful for us, than a purely verbal description of your problem.
 
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.
 
  • #10
I`m wrong,Ctrl-Z(or F6) worked.
 
Back
Top