C语⾔中的getchar和putchar详解
⼀、⾸先给出《The_C_Programming_Language》这本书中的例⼦:
#include <stdio.h>
int main( )
{
int c;
c = getchar();
while (c != EOF)
{
putchar();
c= getchar();
}
return0;
}
这⾥主要解释下为什么要⽤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
c语言char的用法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读⼊时,如果不按回车符,所有输⼊会放⼊缓冲区,⽽不会被读⼊,所以执⾏c=getchar();时,我们输⼊12,如果不按回车键,1仍然不会读⼊;
2) 最后按下的回车键,虽是⽤来告诉系统输⼊已结束,但同时也会作为⼀个字符放⼊缓冲区,所以我们输⼊12,按回车后,输⼊流其实有三个字符:1、2、回车,⽽这个回车就被e读取了;
3) 12是被当做两个字符1和2(注意,不是数字1、2),⽽不像%d时,作为⼀个数字12来看待;
4) putchar()输出指定字符,不会在输出后⾃动换⾏,所以putchar(c);和putchar(d);之间要加putchar(‘\n’);如果不加的话,会把c和d两个⾃动(1、2)输⼊到同⼀⾏。
5)getchar可以读⼊所有字符。
6)windows下如果想结束,就输⼊Ctrl+Z,表⽰EOF。
补充:上⾯这个⽤putchar会输出字符,如果字符为\n之类的也同样输出,即换⾏。
还有⼈认为putchar、getchar和scanf、printf功能重复,甚⾄不如后两个,实际上略有不同:
getchar跟putchar是输⼊输出单字符的,printf跟scanf可以输⼊输出多字符,并且getchar和putchar只可
以⽤于字符型的输⼊和输出,⽽scanf和printf可以⽤于整型浮点型和字符型等类型的输⼊和输出,这也是因为对于字符,⽤这两个就⽐前⾯的简单多了,你以后编得多了就知道了,希望能帮助到你
以上皆为个⼈观点,如有意见,欢迎讨论。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论