从头再学C语言:getchar原来是这样的。

先说点不太远的题外话:大一上完C语言课后就怎么再写过程序了,现在打算从头再学,真正掌握好,然后慢慢的能写一些大点的程序。一直很向往《The C Programming Language》这本书,上个月就买来了,但一开始抱着很认真的态度,决定看一页就要翻译一页,所谓的翻译是实实在在的写出中文来。然后我一个星期翻了两页~这个星期决定洗心革面,不能再在这种细节上纠缠了,于是终于开始看完了introduction,开始看正文。比上周感觉好多了,希望以后能够坚持看下去,学下去,并利用这个平台记录自己的收获。

今天最主要的收获是对getchar()有了更深点的理解。

运行以下代码的时候:

#include <stdio.h>
/* copy input to output; 1st version */
main()
{
int c;
c = getchar();
while (c != EOF) {
putchar(c);
c = getchar();
}
}

发现即便是输入多个字符也能输出来,觉得很奇怪,因为getchar()是只能读单个字符的。另外输入数字的时候,输出的也是那个数字,而我以为应该是输出该数字对应的ASCII码。

于是先单独对putchar()函数进行测试,最后得出的结论是putchar()的功能等同于语句 printf("%c",a)。a的格式可以是int也可以是char,如果对a赋值一个数字,putchar就输出改数字对应的ASCII码,如果是单引号引起的字符,就输出该字符。对putchar的功能没有了疑问,但上段中的问题仍然没有答案。于是上网上搜索。百度百科上说:

 getchar有一个int型的返回值.当程序调用getchar时.程序就等着用户按键.用户输入的字符被存放在键盘缓冲区中.直到用户按回车为止(回车字符也放在缓冲区中).当用户键入回车之后,getchar才开始从stdio流中每次读入一个字符.getchar函数的返回值是用户输入的第一个字符的ASCII码,如出错返回-1,且将用户输入的字符回显到屏幕.如用户在按回车之前输入了不止一个字符,其他字符会保留在键盘缓存区中,等待后续getchar调用读取.也就是说,后续的getchar调用不会等待用户按键,而直接读取缓冲区中的字符,直到缓冲区中的字符读完为后,才等待用户按键.


第一次看不太懂,回程序中把源代码中的循环结构去掉,发现不能输出多个字符了。重新写回循环,并在putchar(c);和c=getchar();中添加语句 printf("&") (原谅我,到现在都之后用这种笨方法进行调试,如果有人看教教其他的调试方法,我会非常感激的),再回去看上面的解释,终于理解了。比如当我输入abc时,流程是这样的:循环外的getchar将abc都存入缓存区,进入第一次循环后,putchar输出a,getchar不在等待我输入,而是直接读b。进入第二次循环,输出b,getchar仍然不等待我输入,读c。依次类推,而且回车其实也会被输出的。

这些知识在当初学c的时候根本都没有注意到。能有这样的收获,很开心。

最后问个问题,希望有大侠可以回答。c!=EOF这句应该怎么实现?貌似EOF实际上是不存在的,最后我是把它改成其他的字符来测试的。是只有在unix中才有效吗?

初次写文,欢迎批评指教!!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值