getchar函数讲解legend



C语言中的getchar和putchar详解 






首先给出《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和后面的回车没有被利用。


这便是整个流程。


总结:
(1)
getchar()函数,如果缓冲区里有字符,则从缓冲区里寻找字符,如果缓冲区里没有字符,则输入字符放入缓冲区。
上面输入12回车,缓冲区里有三个字符,所以c=getchar(); d=getchar(); e=getchar()分别从缓冲区里获得了
1,2, 回车。
(2)getchar() 函数返回值为整形。所以最好int a=getchar(); 因为EOF=-1也是getchar()的返回值。
(3)getchar() 输入一个字符需要回车才可以结束。所以进入缓冲区中的内容为字符与回车,如果担心回车对程序的影响,
所以每次int a=getchar();然后加上 int ignoreReturn=getchar();吃掉回车。


(4)区分getch() 与getchar():


1.getch()输入之后不回显,即输入之后不显示;getchar()会显示。
2.getch()包含在头文件conio.h中,getchar()包含在stdio.h中。
3.getch()输入之后不需要按回车,即表示输入结束,程序自动往下执行;
getchar()是从缓冲区里寻找一个字符,如果没有则输入,需要按回车表示输入结束。


更常用的是getchar();




额外:
将一个整数n(long 类型)按照H:M:S(小时:分钟:秒)的形式输出:
方法一:
S=n%60;
M=(n/60)%60;
H=n/3600;


方法二:
H=n/3600;
M=(n%3600)/60;
S=(n%3600)%60;




首先给出《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和后面的回车没有被利用。


这便是整个流程。


总结:
(1)
getchar()函数,如果缓冲区里有字符,则从缓冲区里寻找字符,如果缓冲区里没有字符,则输入字符放入缓冲区。
上面输入12回车,缓冲区里有三个字符,所以c=getchar(); d=getchar(); e=getchar()分别从缓冲区里获得了
1,2, 回车。
(2)getchar() 函数返回值为整形。所以最好int a=getchar(); 因为EOF=-1也是getchar()的返回值。
(3)getchar() 输入一个字符需要回车才可以结束。所以进入缓冲区中的内容为字符与回车,如果担心回车对程序的影响,
所以每次int a=getchar();然后加上 int ignoreReturn=getchar();吃掉回车。


(4)区分getch() 与getchar():


1.getch()输入之后不回显,即输入之后不显示;getchar()会显示。
2.getch()包含在头文件conio.h中,getchar()包含在stdio.h中。
3.getch()输入之后不需要按回车,即表示输入结束,程序自动往下执行;
getchar()是从缓冲区里寻找一个字符,如果没有则输入,需要按回车表示输入结束。


更常用的是getchar();




额外:
将一个整数n(long 类型)按照H:M:S(小时:分钟:秒)的形式输出:
方法一:
S=n%60;
M=(n/60)%60;
H=n/3600;


方法二:
H=n/3600;
M=(n%3600)/60;
S=(n%3600)%60;
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值