为什么我用fgets不行呢?系统无视了我的存在!!!

梗概:为什么我用fgets不行呢?系统无视了我的存在!!!

我还没输入东东啊。。怎么就提示【请安任意键继续】的??

原来是缓冲区的问题啊?

一、什么是缓冲区

  缓冲区又称为缓存,它是内存空间的一部分。也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区。

  缓冲区根据其对应的是输入设备还是输出设备,分为输入缓冲区和输出缓冲区。

  二、为什么要引入缓冲区

  我们为什么要引入缓冲区呢?

  比如我们从磁盘里取信息,我们先把读出的数据放在缓冲区,计算机再直接从缓冲区中取数据,等缓冲区的数据取完后再去磁盘中读取,这样就可以减少磁盘的读写次数,再加上计算机对缓冲区的操作大大快于对磁盘的操作,故应用缓冲区可大大提高计算机的运行速度。

  又比如,我们使用打印机打印文档,由于打印机的打印速度相对较慢,我们先把文档输出到打印机相应的缓冲区,打印机再自行逐步打印,这时我们的CPU可以处理别的事情。

  现在您基本明白了吧,缓冲区就是一块内存区,它用在输入输出设备和CPU之间,用来缓存数据。它使得低速的输入输出设备和高速的CPU能够协调工作,避免低速的输入输出设备占用CPU,解放出CPU,使其能够高效率工作。

  三、缓冲区的类型

  缓冲区 分为三种类型:全缓冲、行缓冲和不带缓冲。

  1、全缓冲

  在这种情况下,当填满标准I/O缓存后才进行实际I/O操作。全缓冲的典型代表是对磁盘文件的读写。

  2、行缓冲

  在这种情况下,当在输入和输出中遇到换行符时,执行真正的I/O操作。这时,我们输入的字符先存放在缓冲区,等按下回车键换行时才进行实际的I/O操作。典型代表是键盘输入数据。

  3、不带缓冲

  也就是不进行缓冲,标准出错情况stderr是典型代表,这使得出错信息可以直接尽快地显示出来。

  四、缓冲区的刷新

  下列情况会引发缓冲区的刷新:

  缓冲区满时;

  执行flush语句;
原文出自【比特网】,转载请保留原文链接:http://soft.chinabyte.com/database/47/12481547.shtml

所以我们用fgets的时候,最好配合fflush(stdin)一起用!!

flush(stdin)刷新标准输入缓冲区,把输入缓冲区里的东西丢弃  
fflush(stdout)刷新标准输出缓冲区,把输出缓冲区里的东西打印到标准输出设备上。

为什么我用fgets不行呢?系统无视了我的存在!!!,布布扣,bubuko.com

时间: 2024-08-05 20:37:46

为什么我用fgets不行呢?系统无视了我的存在!!!的相关文章

为什么我用gets不行呢?系统无视了我的存在!!!

梗概:为什么我用gets不行呢?系统无视了我的存在!!![是gets,上次的打错了,,误用fgets,不好意思]我还没输入东东啊..怎么就提示[请安任意键继续]的?? 原来是缓冲区的问题啊? 一.什么是缓冲区 缓冲区又称为缓存,它是内存空间的一部分.也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区. 缓冲区根据其对应的是输入设备还是输出设备,分为输入缓冲区和输出缓冲区. 二.为什么要引入缓冲区 我们为什么要引入缓冲区呢? 比如我们从磁

win10 系统下无法正常安装 Anaconda3

最近国庆两天,突然心血来潮重装了一遍系统,重装成了win10系统以后毛病百出哇,昨天和今天一直在解决一个问题,那就是安装Anaconda3的时候出现不了快捷方式,如下图这样只有一个快捷方式(在win7的时候还好好的): 而且点进去会报如下错误:D:\Program Files\Anaconda3\Scripts\activate.bat 不是内部或外部命令,也不是可运行的程序或批处理文件. 当时一瞬间就想到了百度,于是各种百度,然后发现我这个还有一个问题:'conda' 不是内部或外部命令,然后

NFS服务与crond服务

NFS服务:用于linux系统之间,基于TCP/IP协议层,可以将远程的计算机磁盘挂载到本地,像本地磁盘一样操作. ---------------------------------------------------------------------------------------------------------------------------- Linux 服务端: 1.准备环境 iptables -F 关闭防火墙配置 systemctl stop firewalld 关闭防火

Linux Kernel - Debug Guide (Linux内核调试指南 )

http://blog.csdn.net/blizmax6/article/details/6747601 linux内核调试指南 一些前言 作者前言 知识从哪里来 为什么撰写本文档 为什么需要汇编级调试 ***第一部分:基础知识*** 总纲:内核世界的陷阱 源码阅读的陷阱 代码调试的陷阱 原理理解的陷阱 建立调试环境 发行版的选择和安装 安装交叉编译工具 bin工具集的使用 qemu的使用 initrd.img的原理与制作 x86虚拟调试环境的建立 arm虚拟调试环境的建立 arm开发板调试环

PHP中的随机性——你觉得自己幸运吗?

PHP中的随机性——你觉得自己幸运吗? 你总是应该使用一个密码学上安全的伪随机数生成器,random_compat 库提供了一种好的实现.如果你想要使用可靠的随机数据源,如你在本文所见,建议尽快使用 random_int 和 random_bytes. 作者:邱康来源:码农网|2016-01-21 09:55     收藏      分享 网+线下沙龙 | 移动APP模式创新:给你一个做APP的理由>> 本文分析了生成用于加密的随机数的相关问题. PHP 5没有提供一种简单的机制来生成密码学上

putty连接centos连接被拒绝

首先检查SSHD服务是否启用 进入终端输入 #ssh localhost 如果提示:ssh: connect to host localhost port 22: Connection refused 错误 不用管它,没有启动sshd服务的缘故 安装sshd命令: #yum install openssh-server 安装好后开启: #/etc/init.d/sshd start  或者 service sshd start 万一此时还是连接不上去,防火墙开放22端口即可 #/sbin/ipt

linux内核调试指南

linux内核调试指南 一些前言 作者前言 知识从哪里来 为什么撰写本文档 为什么需要汇编级调试 ***第一部分:基础知识*** 总纲:内核世界的陷阱 源码阅读的陷阱 代码调试的陷阱 原理理解的陷阱 建立调试环境 发行版的选择和安装 安装交叉编译工具 bin工具集的使用 qemu的使用 initrd.img的原理与制作 x86虚拟调试环境的建立 arm虚拟调试环境的建立 arm开发板调试环境的建立 gdb基础 基本命令 gdb之gui gdb技巧 gdb宏 汇编基础--X86篇 用户手册 AT&

LDP的快速收敛---LDP会话保护(高级feature)

Technorati 标签: MPLS,CCIE,LDP,LDP session protection,收敛 LDP收敛总结Summary: 如果一个有冗余链路的网络,主链路down了,那么LDP的收敛时间=IGP的收敛时间.(约等于) 当主链路恢复以后,LDP的收敛需要等待IGP收敛完了,LDP才能重新建立邻居(TCP/UDP 646,建立LPD绘话和邻居),然后交换标签. 在中间会出现空档期,IGP的下一跳和LSP不一致,且IGP邻居建立好了,LDP的标签状态是drop状态.LSP不完整,最

VSS 2005 配置简明手册

vss2005下载地址  http://www.shangdu8.com/download/Microsoft.Visual.SourceSafe.2005_01.rar 1: http://cn-web.com/cnweb/44/233/article/             包含图解 2: 2007年08月19日 星期日 21:03 服务器端: 1.服务器端安装IIS(非Internet方式可不用) 2.安装VSS2005的服务器端(当然如果本地测试,客户端也同时装好了) 3.选择micr