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

首先,这两个函数不是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++

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/489498.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

三星固态860evo安装_固态要涨价了?我赶紧屯了这几块好货

从2019年开始,固态硬盘的价格更加适合入手了,几乎已经成为了人们装机的首选,传统的机械硬盘则开始不受重视。到2020年,春节在家闲来无事,笔者发现一些硬盘已经开始有了一定幅度的涨价现象,为了不被请去喝茶…

全球技术竞争新态势

来源:《科技参考》 2019年第11期转自:科情智库技术作为经济增长最重要的驱动力之一,被各国政府视为重要的国家核心资产,围绕着技术的国际竞争也日趋激烈,主要呈现了以下5个特点:一是各国竞相谋划布局新兴和…

python10086查询系统_Python获取移动性能指标

最近两天在研究移动性能这块,这个的用处非常大,比如说在做性能测试的时候用top 或者 dstat 1的时候获取到的性能指标是非常实用的,即时获取的指标评估和分析系统瓶颈。再就是在自动化中调用性能指标,每一步导致的手机性能都即时打…

fir c语言程序,fir.rar fir的c语言程序 - 下载 - 搜珍网

fir/16组实验报告/16组试验报告.docfir/16组实验报告/源程序/Fir_c/cc_build_Debug.logfir/16组实验报告/源程序/Fir_c/Debugfir/16组实验报告/源程序/Fir_c/Debug.lkffir/16组实验报告/源程序/Fir_c/Debug.lkvfir/16组实验报告/源程序/Fir_c/Fir.cfir/16组实验报告/源程序/Fir…

cnn输入层_多尺度CNN特征图的分析与应用

本文适用于那些参与CNN架构设计的工程师和研究人员,他们厌倦了盲目尝试和错误,可以从CNN主干中选择哪些特征图以改善其模型的性能,而宁愿从早期开始设计过程的步骤,以使特征图的空间比例轮廓与训练数据集中的对象尺寸相匹配。抽象…

从5G落地看2020年科技产业投资机会

来源:兴业证券015G 商用开展,通信建设、智能终端、云端服务等领域,出现周期性机遇2019 年全球 5G 移动网络陆续商用,将直接拉动通信行业资本开支,同时刺激联网终端的需求,为 AI 及云计算等应用铺路&#xf…

python模块分类_Python-模块分类及导入

使用python时,我们会发现经常需要import一些模块。模块其实就是一个python文件,导入模块的实质是把模块中的内容执行一次。例如,有个模块叫mokuai,我们可以这样导入from mokuai import * # 导入所有的内容from mokuai import a #从import中导…

C语言 BMP24位变单色,怎么将24位色BMP图片改为单色或16色?(2)

当前位置:我的异常网 VC/MFC 怎么将24位色BMP图片改为单色或16色?怎么将24位色BMP图片改为单色或16色?(2)www.myexceptions.net 网友分享于:2013-01-10 浏览:432次GetClientRect(hWnd,&rc);Width rc.righ…

cat命令详解_需要!Linux常用监视和故障排查命令详解

作者:老油条IT记公众号:老油条IT记#命令预览1.top2.ps3.nice4.kill5.iostat6.mpstat7.vmstat8.df9.du10.netstat11.ss#首先我们先来了解一下什么是进程#进程:是Linux用来表示正在运行的程序的一种抽象概念,Linux系统上所有运行的东…

C语言二维数组找出交集,【leetcode C语言实现】剑指 Offer 04. 二维数组中的查找...

题目描述在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例:现有矩阵 matrix 如下&#xf…

知识图谱从哪里来:实体关系抽取的现状与未来

来源:知乎(zibuyu9)作者:韩旭、高天宇、刘知远最近几年深度学习引发的人工智能浪潮席卷全球,在互联网普及带来的海量数据资源和摩尔定律支配下飞速提升的算力资源双重加持下,深度学习深入影响了自然语言处理…

线条边框简笔画图片大全_超治愈萌系手帐素材大全 美食旅游花草人物花边都备齐了...

现代人每天都生活在一个充满焦灼感的空气中,成年人的世界里,每个人都不容易。不论是生活还是工作,都充满了各种挫折。很少有人能一帆风顺,为学习、为工作、为家庭、为感情、我们总会在坎坎坷坷中成长,难免会觉得焦虑。…

红米android版本,微信红米低版本下载

微信红米低版本是适用于红米手机的低版本微信软件,此版本为7.0.0版,安装包不到一百兆,该有的功能也都挺齐全,很多用户对于微信新版本的内存占用不堪重负,那么这个历史低版本就很适合你,红米手机也能轻松兼容…

python模块导入_Python模块及其导入

一、模块 1、模块的定义: 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少, 很多编程语言都采用这种组织代码的方式。在Python中,一个.py文件…

《2018-2019世界智能手机AI智商测试报告》发布会将在京举办

《2018-2019世界手机AI智商测试报告》发布会将于2019年11月21日在北京举行,本次发布会由中国科学院虚拟经济与数据科学研究中心、中国科学院大数据挖掘与知识管理重点实验室和天府大数据国际战略与技术研究院联合主办。智能手机作为人们与外界即时连接的终端设备&am…

软件需求分析文档模板_小议管理软件需求分析

从事管理软件设计,一般都是从用户需求分析开始。从事软件工作的,大概谁都知道需求分析的重要性,可能大部分人都吃过需求分析不充分的亏。兵法云,“谋定而后动”。对一个项目而言,需求分析应该是“谋”的一部分&#xf…

python日期格式转换_python中有关时间日期格式转换问题

每次遇到pandas的dataframe某列日期格式问题总会哉坑,下面记录一下常用时间日期函数.... 1、字符串转化为日期 str—>date import datetime date_str 2006-01-03 date_ datetime.datetime.strptime(date_str,%Y-&m-%d) 这是单个字符串的转化,其…

38页PPT深度解析:半导体设备产业链全景图

来源:平安证券要点摘要:1、我国半导体设备市场空间大,增长动力强劲。半导体设备主要用于半导体制造和封测流程,分为晶圆加工设备(核心为光刻机、刻蚀机、薄膜沉积设备)、封装设备和检测设备。2018年全球半导…

android actionbar 背景,Android应用开发之定制页面背景及Actionbar overflow menu的背景色...

本文将带你了解Android应用开发之定制页面背景及Actionbar overflow menu的背景色,希望本文对大家学Android有所帮助定义theme和style, 注意是actionOverflowMenuStyle 和 android:windowBackground.(实测5.1.1和7.1.1)style/CustomActionOverflowMenuStyleandroid:…

python周天为一周的开始_周天-和周天相关的内容-阿里云开发者社区

商朝商高勾三股四玄五勾股定理昔者周公问于商高曰:“窃闻乎大夫善数也,请问昔者包牺立周天历度——夫天可不阶而升,地不可得尺寸而度,请问数安从出?”商高曰:“数之法出于圆方,圆出于方&#xf…