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标准输入流相关推荐

  1. C语言stdout,stdin流介绍

    stdout,stdin, stderr是一个C程序中默认开启的三个数据流(文章只介绍stdout, stdin.) stdout -- 标准输出流 -- 屏幕 stdin -- 标准输入流 -- 键 ...

  2. python基础课程_学习笔记13:标准库:有些收藏夹——sys

    标准库:有些收藏夹 sys sys这个模块可以让你访问和python解释器联系紧密的变量和函数. sys模块中一些重要的函数和变量 函数/变量 描写叙述 argv 命令行參数,包含脚本名称 exit( ...

  3. Python Module_sys/random

    目录 目录 前言 软件环境 Python标准库初识 Python常用的标准库模块 dir 函数使用方法 sys操作系统功能模块 sysstdinsysstdoutsysstderr标准IOError流 ...

  4. python3 sys模块

    sys模块就是用来管理Python自身运行环境,Python就是解释器,运行在操作系统上面的程序,所以sys包,可以用来管理Python运行的参数,比如内存,文件大小等等. 另外一个重要功能就是可以和 ...

  5. python基础案例教程_python基础教程 10-11例子如何执行

    展开全部 10. 模块相关 Python的标准安装包包括一组模块,称为标准库(standard library). 10.1 模块 10.1.1 模块是程序 # hello.pyprint " ...

  6. PHP的php://

    php:// - 访问各个输入/输出流(I/O streams) php://stdin标准输入流 php://stdout标准输出 php://stderr错误描述符 php://input访问请求 ...

  7. 14 | 深入解析Pod对象(一):基本概念

    今天我和你分享的主题是:深入解析 Pod 对象之基本概念. 在上一篇文章中,我详细介绍了 Pod 这个 Kubernetes 项目中最重要的概念.而在今天这篇文章中,我会和你分享 Pod 对象的更多细 ...

  8. python中模块sys与os的一些常用方法

    sys模块提供了访问或操作与python解释器相关方法与对象. 我们就列举出常用到的知识,以后,随着学习,不断补充. 几个常用到的动态对象: sys.argv,这是一个列表,它包含了所有传递给脚本的命 ...

  9. python学习笔记(十一)标准库sys

    sys模块包括了一组非常实用的服务,内含很多函数方法和变量,用来处理Python运行时配置以及资源,从而可以与前当程序之外的系统环境交互,如:Python解释器. 1. 导入sys模块 首先,打开终端 ...

最新文章

  1. sql数据类型转换(cast() and convent())函数)
  2. 种群计数 (pop_count)
  3. boost::safe_numerics::checked_result相关的测试程序
  4. Qt Creator IDE概述
  5. Python3.7版本unittest框架添加用例的方法
  6. vue组件中嵌套html,vue2.0怎么用组件自定义标签实现组件的嵌套?
  7. Qt工作笔记-QMainWindow自定义窗体中利用状态栏进行窗体放缩
  8. 怎么判断一个字符串的最长回文子串是否在头尾_回文自动机入门
  9. Linux文件管理和用户管理
  10. 从最新的ACL、NAACL和EMNLP中详解知识增强的语言预训练模型
  11. 【Python 语言基础】第一章 Python入门
  12. poster模板_高分北斗大赛报名进行中,ppt、poster展示模板推送
  13. Bluedroid 函数分析:bta_dm_gattc_register
  14. 超简单!只需四步将照片处理成手工素描
  15. 将远程仓库的项目克隆到本地
  16. Mac壁纸软件哪款好用?Wallpaper Wizard可以一试
  17. 20200928 006.简单错误如何处理_守破离学习法_程序员修炼手册
  18. 利用Webbrowser类实现超长网页的截屏的实现(解决报错不能截取的难题)
  19. 雅虎与谷歌合作后的十种景象 鲍尔默或将离职
  20. DPDK — L3 Forwarding 与 IP 路由选择算法

热门文章

  1. Galaxy S II I9100 购机验机详细指南.
  2. 飞链云版图-像素放大器
  3. 麻省理工学院计算机博士_代码可以自我意识吗? 在麻省理工学院学习计算机科学的思考(第一部分)...
  4. war3 兵种出生位置研究
  5. 面试题-100盏灯问题
  6. 前端面试宝典(内容很多,也有很多重复)
  7. 饿了么 python_饿了么深度学习平台 elearn
  8. python回声程序echo 一行代码_Python Socket 编程示例 Echo Server
  9. 青龙面板--中青看点极速版(视频+库更新)
  10. 挂在笔记本上的随身台灯 —— 明基 ScreenBar Lite 长测