Chinaunix首页 | 论坛 | 博客
  • 博客访问: 434905
  • 博文数量: 103
  • 博客积分: 5010
  • 博客等级: 大校
  • 技术积分: 971
  • 用 户 组: 普通用户
  • 注册时间: 2007-06-11 17:22
文章分类
文章存档

2008年(77)

2007年(26)

我的朋友

分类: C/C++

2007-12-22 00:27:42

(1)char c;
c=getchar();
if(c==EOF)
...
 
这条语句潜在的危险就连许多高手都难以察觉,其责任并不在用户,是函数getchar误导了使用者。
 
看一下getchar的原型:

          int getchar(void);

那么,上面那个例子,由于c是char类型,取值范围是[-128,127],如果宏EOF的值在char的取值范围之外,那么if语句将总是失败,像我们这种在门外徘徊的探头探脑的人们,怎么会懂这么多恩?? 

于是乎,又有个问题,为什么c标准库函数的设计者要将getchar声明为令人迷糊的int类型呢? 

答案很简单:在正常情况下,getchar的确返回单个字符。但如果getchar碰到文件结束标志或发生读错误,它必须返回一个EOF。为了区别于正常的字符,只好将EOF定义为负数(通常为-1)。因此函数getchar就设置成了int类型。

(2) getchar()函数
 getchar()函数也是从键盘上读入一个字符, 并带回显。getchar()函数等待输入直到按回车才结束,   回车前的所有输入字符都会逐个显示在屏幕上。但只有第一个字符作为函数的返回值。

说明:      getchar是一个宏,用于返回指定的stdin输入流的下一个字符,    它定义为getc(stdin)。
返回值:    调用成功时,getchar返回所读的字符,它已被转换为无符号扩展的整形值。在遇到文件结束或出错时,返回EOF。
可移植性 getchar适用于UNIX系统,在ANSI C中定义,与Kernighan和Ritchie的定义兼容

阅读(1016) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~