首先,这两个函数不是C标准库中的函数,

int getch(void)    //从标准输入读入一个字符,当你用键盘输入的时候,屏幕不显示你所输入的字符。也就是,不带回显。

int getche(void)    //从标准输入读入一个字符,键盘输入的时候,屏幕显示所输入的字符。带回显。

这两个函数包含在头文件conio.h中,需要记住的是conio.h不是C标准库中的头文件。Micorsoft 和 Borland的

C编译器提供了conio.h,用来创建控制台文本用户界面。一般在Windows系统下安装了VS、VC等,就可以包含conio.h头文件。但是一般

在Unix、Linux系统中,/usr/include/中都没有这个头文件。

getch和getche在等待用户从键盘输入的时候,用户按下一个键后,不需要按回车,程序自动往下执行。在Linux中,终端输入在缺省情况下是被“一锅端”的,也就是说整行输入是被一起处理的。通常,这是一种人们所希望的方便的办法,但它也意味着在读入数据时必须按一下回车键表示输入行结束后才能得到输入的数据。在游戏中,很多都提供了“老板键”,它的实现,就是利用了这两个函数。

其次,除了getch和getche,其他的都是C标准库中的头文件,包含在头文件stdio.h中。

int fgetc ( FILE * stream ); //从流stream中读一个字符。可以将标准输入stdin作为它的实参,这时候从标准输入读取一个字符。

int getc(FILE * stream); //和fgetc等效,由fgetc通过宏实现。

int getchar ( void );     //从标准输入stdin读入一个字符,程序等待你输入的时候,你可以输入多个字符,回车后程序继续执行。

//但getchar只读入一个字符

说明:getc、getchar都是通过宏定义借助fgetc实现。如getchar的实现为,#define getchar() fgetc(stdin)。

char * fgets (char * str, int num, FILE *stream);

//从流stream中读入最多num个字符到字符数组str中,当遇到换行符时、或读到num-1个字符时停止。

//自动加上'\0'空字符结尾

char * gets ( char * str );//从标准输入stdin读取一个字符串,遇到换行或结束时候终止。

//不同于fgets,他没有指定num,所以需要注意字符数组str的大小。

说明: fgets和gets之间没有宏定义的关系,彼此各自有自己的实现。蠕虫病毒的实现就是函数gets的“功劳”。gets函数的任务是从流中读入一个字符串。它的调用者会告诉它把读入的字符串放在什么地方。但是,gets()函数并不检查缓冲区大小,如果调用者提供了一个指向堆栈的指针,并且get()函数读入的字符数量超过了超过了缓冲区的空间大小,get()会愉快地将多出来的字符继续写入到堆栈中,这就覆盖了堆栈中原来的内容。如:

main()

{charline[512];//在程序的堆栈上分配512个字符的空间...

gets(line);//蠕虫病毒的入口,可以将恶意代码通过多出来的数据写入堆栈}

建议不要用getch和getche,因为它们不是C标准库中的函数。用它们写出的程序可移植性差,不同的编译器不保证可以包含conio.h。建议用fgets函数彻底替代gets函数。

另外,绝大多数的这些get函数,都有对应的put版本。

int fputc ( int character, FILE * stream );

int putc ( int character, FILE * stream );       //通过宏定义和fputc实现

int putchar ( int character );        //通过宏定义实现:#define putchar(c) fputc(c, stdout)

int fputs ( const char * str, FILE * stream );

int puts ( const char * str );

说明:两者之间无宏定义实现关系。puts(const char *str)近似等效于fputs(cosnt char *str, stdout),不同点是前者还输出一个'\n'

最后,关于EOF

EOF是在stdio.h文件中定义的符号常量,值为-1。如,

fputc函数返回一个值:如果输出成功则返回值就是输出的字符;如果输出失败,则返回一个EOF。

fgetc函数读字符时遇到文件结束符,函数返回一个文件结束标记EOF。如果想从一个磁盘文件顺序读入字符并在屏幕上显示,可以:

ch=fgetc(fp);while(ch!=EOF){

putchar(ch);

ch=fgetc(fp);

}

注意,EOF不是可输出字符,因此不能在屏幕上显示。由于ASCII码不可能出现-1,因此EOF定义为-1是合适的。当读入的字符值等于-1(即

EOF)时,表示读入的已不是正常的字符,而是文件结束符。但以上只适用于读取文本文件的情况。现在ANSI C

已经允许用缓冲文件系统处理二进制文件,而读入某一个字节中的二进制数据的值有可能是-1,而这又恰好是EOF的值。这就出现了需要读入有用数据,却处理

为“文件结束”。feof(fp) 用来测试fp所指向的文件当前状态是否是“文件结束”。如果想顺序读入一个二进制文件数据,可以:

while(!feof(fp)){

c=fgetc(fp);

...

}

posted on 2010-07-26 17:34 何克勤 阅读(362) 评论(0)  编辑  收藏 所属分类: C/C++

c语言gets与fgetc,区分C语言中getch、getche、fgetc、getc、getchar、fgets、gets 转相关推荐

  1. 区分C语言中getch、getche、fgetc、getc、getchar、fgets、gets

    首先,这两个函数不是C标准库中的函数,    int getch(void) //从标准输入读入一个字符,当你用键盘输入的时候,屏幕不显示你所输入的字符.也就是,不带回显.  int getche(v ...

  2. c语言getch获取换行符,区分C语言中getch、getche、fgetc、getc、getchar、fgets、g...

    首先,这两个函数不是C标准库中的函数: int getch(void) //从标准输入读入一个字符,当你用键盘输入的时候,屏幕不显示你所输入的字符.也就是,不带回显. int getche(void) ...

  3. c语言中getche的用法,c语言中getch的用法

    [www.hywsbj.com--图表展板] getch()函数是无回显的从控制台取得一个字符.以利用getch()函数让程序调试运行结束后等待编程者按下键盘才返回编辑界面,即任意键继续效果.下面小编 ...

  4. C语言中getch()的用法

    C语言中getch()函数详解及简单实例 这个函数是一个不回显函数,当用户按下某个字符时,函数自动读取,无需按回车,有的C语言命令行程序会用到此函数做游戏,但是这个函数并非标准函数,要注意移植性!Wi ...

  5. getch方法_c语言中getch的用法

    1 c 语言中 getch 的用法 getch() 函数是无回显的从控制台取得一个字符. 以利用 getch() 函数让程序调试运行结束后等待编程者按下键盘才返回编辑界面 , 即 任意键继续效果.下面 ...

  6. c语言char有什么作用,C语言中char*和char[]用法区别分析

    本文实例分析了C语言中char* 和 char []的区别.分享给大家供大家参考之用.具体分析如下: 一般来说,很多人会觉得这两个定义效果一样,其实差别很大.以下是个人的一些看法,有不正确的地方望指正 ...

  7. c语言char str什意思,C语言中,charstr的str到底表示什么?

    问题:C语言中,char str的 str到底表示什么? 描述: #include int main() { #第一处 char *pstr = "abcdef"; printf( ...

  8. c语言中变量加1,c语言中,指针加1的情况.指针变量详细介绍

    指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址. 要搞清一个指针需要搞清指针的四方面的内容: 指针的类型, 指针所指向的 类型, 指针的值或者叫指针所指向的内存区, 还有指针本身所占 ...

  9. c语言if语句知识点总结,c语言中if语句知识点总结.docx

    c语言中if语句知识点总结.docx 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址水印. 3. ...

最新文章

  1. Hibernate之继承映射
  2. Linux中yum源配置及软件安装管理
  3. nginx在linux reload报错,linux下安装nginx
  4. org.hibernate.NonUniqueObjectException 异常处理
  5. android 电话 状态栏,Android透明式状态栏、导航栏实现
  6. 《IBM-PC汇编语言程序设计》(第2版)【沈美明 温冬婵】——第十一章——自编解析与答案
  7. 《江南百景图》,解谜经营背后的逻辑
  8. 《网易编程题》藏宝图
  9. “小罐茶大师作”20亿元销售额难掩虚假宣传本质
  10. 一个 bug ,罚款 200,我真待过这样的公司
  11. 找出数组中只出现过一次的数
  12. select样式调整
  13. ELK温度监控--lmsensorsbeat
  14. 约翰冯诺依曼发明了什么_编程是什么——冯诺依曼结构计算机的出现
  15. 通信原理教程chapter1
  16. 原生Js汉语拼音首字母匹配城市名
  17. cannot be cast to com.activiti.common.config.ICustomProcessDiagramGenerator
  18. 将Excel表格导入到数据库中
  19. Guava学习笔记:Google Guava 类库简介
  20. 【SQL】LATERAL VIEW 的用法

热门文章

  1. flyme8会更新Android版本吗,魅族17系列升级Flyme 8.1操作系统:终于到Android 10
  2. 美团外卖Android Lint代码检查实践
  3. 论文浅尝 | 使用位置敏感的序列标注联合抽取实体和重叠关系
  4. 用训练好的paddlepaddle模型继续训练模型和验证数据ckpt
  5. python中mysql更新字段中传参问题
  6. 令人振奋的好消息!2016年12月8日Google Developers中文网站发布!
  7. Maven:导入Oracle的jar包时出现错误
  8. 软件构造-犯错的艺术——健壮性与正确性,异常,防御式编程,debugging与test的思考与总结...
  9. ElasicSearch(3) 安装elasticsearch-head
  10. Attention Model