开发者

getchar() and putchar()

开发者 https://www.devze.com 2022-12-19 03:44 出处:网络
in the example: #include <stdio.h> main() { long nc; nc = 0; while (getchar() != EOF) ++nc; printf(\"%ld\\n\", nc);

in the example:

#include <stdio.h>

main()
{
    long nc;

    nc = 0;
    while (getchar() != EOF)
        ++nc;
    printf("%ld\n", nc);
}

I don't quite understand it. putchar() would put the character out, but why is it th开发者_C百科at after EOF it puts all the characters out, and where is it remembering all these characters? Thanks.


It's called buffering and it's done by the operating system. Usually it does line buffering where it just saves every character you put to it in memory, and then writes it all to the file when it encounters a line break. This saves on resources because file operations take much more time than other operations. So instead of doing output with every single character, it waits for a bunch of characters to collect in the buffer and writes them out all in one go.

It's just a clever maneuver done by the OS that you, the programmer, don't need to worry about. Just throw your characters at it one by one and let the OS handle the rest in its own way.


[This isn't an answer, but you can't put code in the comments]

I think you meant something like this:

#include <stdio.h>

main()
{
    long nc;
    nc = 0;
    char c;
    while ((c = getchar()) != EOF)
    {
       putchar(c); /* prints one char */
        ++nc;
    }
    printf("%ld\n", nc); /* prints the number of characters read */
}


No where, this code only empty the input and write how many caracters where left before the flush.

This is to be sure that the is no caracters remaining in the input file (stdin)


putchar put the char into the buffer when it comes an enter ,then it will bring the line word output to the screen.

0

精彩评论

暂无评论...
验证码 换一张
取 消