stdin标准输入流
stdin是C中的标准输入流,它是缓冲输入方式。
在程序中,当用户调用stdin相关函数从键盘中获取字符时,函数会先去缓冲区中查看当前是否存在字符。如果存在,则会取出字符;如果不存在,则会中断,提示用户输入。
用户利用键盘输入时,输入的字符会依次被送到缓冲区中,在此处等待的输入函数只有在用户输入了回车时,才会去缓冲区中取字符。
当刷新缓冲区后,缓冲区会被清空。
当输入函数从缓冲区中读取
在C中标准输入指的是键盘的输入,stdin输入就是从键盘上读取字符。
stdin是缓冲输入方式,用户在键盘上输入的字符会首先被送到一个缓冲区中存放。在程序中调用
getchar函数是定义在 stdio.h 文件中的一个输入函数。它从标准输入设备(一般是键盘)中读取一个字符。
在实际工作中,它是这样完成的:
键盘输入到计算机中的字符并不是立刻送到内存中指定位置,而是会首先缓存到一个缓冲区中。这个是计算机为了弥补不同硬件之间速度差距,而惯用的伎俩。
当在程序中第一次调用 getchar();时,函数会去缓冲区看当前是否存在字符,如果有,则会取出一个字符,返回;如果没有,那么会提示用户输入。只有当用户输入了回车,此函数才会再次去缓冲区中取字符,并返回一个字符。
getchar():
我们用getchar()在控制台上取字符的时候,它首先要把所有取得的东西按照顺序放在内存的某个临时的地方,但我们输入回车时它会从这个地方开始在取字符,并按相同的顺序取,当取到回车时就是上次输入的最后一个字符,注意我们在一个程序里不论用多少getchar(),它都会存放在同一个地方,并且不断的向后增加,然后在用getchar()取的时候会从上次取的后面继续取,只要这个存储的地方有字符,那么我们用getchar()时控制台就不会停顿等待我们输入字符,只有当取到换行时才是表示这个地方完全空了,下次在用getchar()的时候控制台才会停顿等待用户输入字符!
getchar()返回的是int型.
[code]
int c;
while((c = getchar()) != EOF)
{
....
}
[/code]
原因在于程序中的变量c被声明为char类型,而不是int类型。这意味着c无法容下所有可能的字符,特别是,可能无法容下EOF。因此,最终结果存在两种情况。一种可能是:某些合法的输入字符在被“截断”后使得c的取值与EOF相同;另一种可能是,c根本不可能取到EOF这个值。对于前一种情况,程序将在文件复制的中途终止;对于后一种情况,程序陷入一个死循环。实际上,还有可能存在第三种情况:程序表面上似乎能够正常工作,但完全是因为巧合。尽管函数getchar的返回结果在赋给char类型的变量c时会发生“截断”操作,尽管while语句中比较运算的操作数不是函数getchar的返回值,而是“被截断”的值c,然而令人吃惊的是许多编译器对上述表达式的实现并不正确。这些编译器确实对函数getchar的返回值作了“截断”处理,并把低端字节部分赋给了变量c。但是,它们在比较表达式中并不是比较c与EOF,而是比较getchar函数的返回值与EOF!编译器如果采取的是这种做法,上面的例子程序看上去就能够“正常”运行了。
stdin标准输入流相关推荐
- C语言stdout,stdin流介绍
stdout,stdin, stderr是一个C程序中默认开启的三个数据流(文章只介绍stdout, stdin.) stdout -- 标准输出流 -- 屏幕 stdin -- 标准输入流 -- 键 ...
- python基础课程_学习笔记13:标准库:有些收藏夹——sys
标准库:有些收藏夹 sys sys这个模块可以让你访问和python解释器联系紧密的变量和函数. sys模块中一些重要的函数和变量 函数/变量 描写叙述 argv 命令行參数,包含脚本名称 exit( ...
- Python Module_sys/random
目录 目录 前言 软件环境 Python标准库初识 Python常用的标准库模块 dir 函数使用方法 sys操作系统功能模块 sysstdinsysstdoutsysstderr标准IOError流 ...
- python3 sys模块
sys模块就是用来管理Python自身运行环境,Python就是解释器,运行在操作系统上面的程序,所以sys包,可以用来管理Python运行的参数,比如内存,文件大小等等. 另外一个重要功能就是可以和 ...
- python基础案例教程_python基础教程 10-11例子如何执行
展开全部 10. 模块相关 Python的标准安装包包括一组模块,称为标准库(standard library). 10.1 模块 10.1.1 模块是程序 # hello.pyprint " ...
- PHP的php://
php:// - 访问各个输入/输出流(I/O streams) php://stdin标准输入流 php://stdout标准输出 php://stderr错误描述符 php://input访问请求 ...
- 14 | 深入解析Pod对象(一):基本概念
今天我和你分享的主题是:深入解析 Pod 对象之基本概念. 在上一篇文章中,我详细介绍了 Pod 这个 Kubernetes 项目中最重要的概念.而在今天这篇文章中,我会和你分享 Pod 对象的更多细 ...
- python中模块sys与os的一些常用方法
sys模块提供了访问或操作与python解释器相关方法与对象. 我们就列举出常用到的知识,以后,随着学习,不断补充. 几个常用到的动态对象: sys.argv,这是一个列表,它包含了所有传递给脚本的命 ...
- python学习笔记(十一)标准库sys
sys模块包括了一组非常实用的服务,内含很多函数方法和变量,用来处理Python运行时配置以及资源,从而可以与前当程序之外的系统环境交互,如:Python解释器. 1. 导入sys模块 首先,打开终端 ...
最新文章
- sql数据类型转换(cast() and convent())函数)
- 种群计数 (pop_count)
- boost::safe_numerics::checked_result相关的测试程序
- Qt Creator IDE概述
- Python3.7版本unittest框架添加用例的方法
- vue组件中嵌套html,vue2.0怎么用组件自定义标签实现组件的嵌套?
- Qt工作笔记-QMainWindow自定义窗体中利用状态栏进行窗体放缩
- 怎么判断一个字符串的最长回文子串是否在头尾_回文自动机入门
- Linux文件管理和用户管理
- 从最新的ACL、NAACL和EMNLP中详解知识增强的语言预训练模型
- 【Python 语言基础】第一章 Python入门
- poster模板_高分北斗大赛报名进行中,ppt、poster展示模板推送
- Bluedroid 函数分析:bta_dm_gattc_register
- 超简单!只需四步将照片处理成手工素描
- 将远程仓库的项目克隆到本地
- Mac壁纸软件哪款好用?Wallpaper Wizard可以一试
- 20200928 006.简单错误如何处理_守破离学习法_程序员修炼手册
- 利用Webbrowser类实现超长网页的截屏的实现(解决报错不能截取的难题)
- 雅虎与谷歌合作后的十种景象 鲍尔默或将离职
- DPDK — L3 Forwarding 与 IP 路由选择算法
热门文章
- Galaxy S II I9100 购机验机详细指南.
- 飞链云版图-像素放大器
- 麻省理工学院计算机博士_代码可以自我意识吗? 在麻省理工学院学习计算机科学的思考(第一部分)...
- war3 兵种出生位置研究
- 面试题-100盏灯问题
- 前端面试宝典(内容很多,也有很多重复)
- 饿了么 python_饿了么深度学习平台 elearn
- python回声程序echo 一行代码_Python Socket 编程示例 Echo Server
- 青龙面板--中青看点极速版(视频+库更新)
- 挂在笔记本上的随身台灯 —— 明基 ScreenBar Lite 长测