打印

C语言中的getchar和putchar详解(转)

[复制链接]
1101|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
加班加点|  楼主 | 2011-11-28 16:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
首先给出《The_C_Programming_Language》这本书中的例子:
#include <stdio.h>


int main()
{
    int c;

    c = getchar();
    while (c != EOF)
    {
          putchar();

             c= getchar();
    }
    return 0;
}

这里主要解释下为什么要用int型来接受getchar函数。
很多时候,我们会写这样的两行代码:
char c;
c = getchar();
这样就很有可能出现问题。因为getchar函数除了返回终端输入的字符外,在遇到Ctrl+D(Linux下)即文件结束符EOF时,getchar ()的返回EOF,这个EOF在函数库里一般定义为-1。因此,在这种情况下,getchar函数返回一个负值,把一个负值赋给一个char型的变量是不正确的。


下面用一个题目来看其实如何获取字符和输出字符的。
#include "stdio.h"
main()
{
    char c,d,e,f;
    printf("please input two characters:\n");
    c=getchar();
    putchar(c);
    putchar('\n');
    d=getchar();
    putchar(d);
    putchar('\n');
    e=getchar();
    putchar(e);
    putchar('\n');
    f=getchar();
    putchar(f);
    putchar('\n');
    printf("c= %c\n",c);
    printf("d= %c\n",d);
    printf("e= %c\n",e);
    printf("f= %c\n",f);
}
运行后先输入“12”,回车,再输入“34”,回车。
运行环境是redhat gcc
运行结果:
please input two characters:
12
1
2


34
3
c=1
d=2
e=

f=3
下面具体解释一下:
getchar函数每次从缓冲区中得到一个字符,putchar函数每次输出一个字符。
首先输入了两个字符12,然后回车,注意这时写入缓存中的有3个字符1,2,回车。
程序中有四个getchar(),于是c='1',d='2',e='\n'。
这时运行到f=getchar();输入缓存中的三个字符均被前三个getchar获取,这时需要用户输入,
这里输入了34
于是f='3',4和后面的回车没有被利用。
这便是整个流程。

相关帖子

沙发
zb0830| | 2011-11-28 22:20 | 只看该作者
好东西,以前都没有想过这些东西,很不错,谢谢楼主的分享!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

610

帖子

1

粉丝