C语言( 缓冲区和重定向)

一.缓冲输入,无缓存输入


while((ch=getchar()) != '#')
putchar(ch);
这里getchar(),putchar()每次只处理一个字符(这里只是知道就好了),而我们使用while循环,当读到#字符时停止
而看到输出例子,第一行我们输入hello word然后按下回车键,把缓冲区里的字符输入到程序中(这种属于缓冲输入)
而还有另一种还有输入叫无缓存输入(因为我的电脑只支持缓存输入,所以这里用刚才输入的例子给你简单的解释下)
这里我们输入在输入hello word会出现这种情况
Hheelllloo wwoorrdd
这里的红色部分就是计算机输出部分,我们输入一个字符计算机就输出一个部分,不会进行缓存
这种无缓存输入一般我们在玩游戏就是这样,我们输入一个键就执行相应的指令
为什么要有缓存区呢,首先,把若干个字符作为一个块进行传输比逐个发送这些字符节约时间。其次,比如用户打错字符,可以直接通过键盘修正错位。当最后按下Enter键时,传输的是正确的输入。
那么,使用缓存输入还是无缓存输入,ANSI C和后续的C标准都规定输入时缓冲的
二.完全缓存和行缓存
完全缓存输入指的是当缓存区被填满时才刷新缓存区(内容被发送至目的地),通常出现在文件输入中。缓冲区的大小取决于系统,常见的大小是512字节和1096字节
行缓存指的时在换行符时刷新缓存区。键盘输入通常时行缓存输入,所以在按下Enter键后才刷新缓存区
三.实例讲解
这里我们做一个猜数字游戏游戏,计算器猜,猜对了久输入y,猜错了久输入n


这里我们让计算机猜数字,这里注意我们每次输入n时,程序会打印两条信息。这是由于程序读取n作为用户否定了数字1,然后还读取了一个换行符作为用户否定了数字2.
所以我们必须进行优化程序


while(getchar() != '\n')
continue;
这里我们用 while循环丢弃输入行最后剩余的内容,包括换行符。但是这个方法还是有个不好的地方就是我们输入n 或f都会被自动判断为n


源码:
#include <stdio.h>int main(){int guess = 1;char response;printf("Pick an integer from 1 to 100.I will try to guess.");printf("it.\nRespond with a y if my guess is right and with");printf("\nan n if it is wrong.\n");printf("uh...is your number %d?\n",guess); //计算机猜数字while((response = getchar()) != 'y'){if(response == 'n') printf("Well,then,is it %d?\n",++guess); //如果输入n则继续猜else printf("Sorry,I understand only y or n.\n"); //非n则告诉你输入错误重新输入while(getchar() != '\n') continue; //处理掉其他多余字符}printf("I knew I could do it!\n");return 0;}
五.重定向
在默认情况下,C程序使用标准的I/O包查找标准输入作为输入源(stdin流)。而程序除了能从键盘输入数据外。还有两种方式
第一种:重定向文件。将文件内容输入到程序中和程序数据输出到文件中。

第二种:使用特定的函数打开文件,会文件进行一系列特定的操作。

在一章节我们主要讲解重定向操作,文件函数操作我们会在后面的章节在进行讲解。
1.重定向输入
比如我们有程序print.c。内容如下

它的功能就算打印输入的数据内容
这里我们在创建一个文本文件.名为data.txt

里面包含文本hello world
这里我将它们放置在同一个文件,这里注意是和可执行文件在一个文件夹当中
而可执行文件(vs 版本的)

红色下划线部分就算项目的存储地址。后面到Debug存放着项目可执行文件。

最后我们使用
.\Project1.exe < data.txt
.\Project1.exe就算执行可执行文件的格式 .\ + 可执行文件名
< 重定向输入符号
Data.txt就算输入文件
最后我们看到结果的确也可以正常打印出来。
2.输出重定向
这里和输入重定向一样。用 > 符号。但这里要记住用 > 会覆盖掉指定输出文件的内容。如果不想覆盖掉可以使用 >> 追加符号。下面我们来演示一下。如果指定的文件未创建,系统将会自动创建

在使用中>后。原本data.txt里面的内容被覆盖了

使用>>会发现原有的内容还在。
这里需要知道重定向是不允许多个文件同时重定向输入和输出的

这里我们在看一个例子。这里我们先看红色下划线部分。Data.txt负责重定向输入。而程序的打印结果重定向到print.txt当中。
而通过dir /b(列出当前目录中所以文件)可以看到之前print.txt文件是没有的。是在执行完重定向之后被自动创建的。而文件的内容和data.txt一样。
好了朋友们我们今天的内容到这就结束了,今天的内容到这里就结束了,如果有啥不会的朋友记得论坛里面提问哈~
如果朋友你感觉文章的内容对你有帮助,可以点赞,关注文章和专栏以及关注我哈,嘿嘿嘿我会定期更新文章的,谢谢朋友你的支持哈

相关文章:
C语言( 缓冲区和重定向)
一.缓冲输入,无缓存输入 while((chgetchar()) ! #) putchar(ch); 这里getchar(),putchar()每次只处理一个字符(这里只是知道就好了),而我们使用while循环,当读到#字符时停止 而看到输出例子,第一行我们输入…...
编程思想、方法论和架构的类型及应用
概要编程思想是指在编写代码时所采用的基本思维方式和方法论。分类编程思想编程思想为软件开发提供了思维范式和指导思路,例如面向对象思想、函数式编程思想等,它们帮助程序员更好地抽象问题、组织代码、提高代码复用性和可维护性,包括一下几…...
【OA办公】OA流程审批大揭秘,带你看遍所有基础流程
流程审批,是所有企业的OA办公系统重要组成部分,是任何OA办公系统都不可缺少的。比起传统的纸张传阅、签批的审批模式浪费了大量的时间和成本,因此越来越多的企业采用OA这种全新的、高效的、智能的审批模式。流程审批除了这些好处,…...
《零基础入门数据结构与算法》专栏介绍
目录 前言 第一部分:重点 第二部分:题库 第三部分:测试 第四部分:实验 第五部分:试卷 总结 前言 本专栏主要分为五个部分: ① 重要知识点详解 ② 近百道练习题解析 ③ 数据结构与算法章节测试 …...
测试开发之Django实战示例 第九章 扩展商店功能
第九章 扩展商店功能在上一章里,为电商站点集成了支付功能,然后可以生成PDF发票发送给用户。在本章,我们将为商店添加优惠码功能。此外,还会学习国际化和本地化的设置和建立一个推荐商品的系统。本章涵盖如下要点:建立…...
【Spring】一文带你吃透AOP面向切面编程技术(下篇)
个人主页: 几分醉意的CSDN博客_传送门 上节我们介绍了什么是AOP、Aspectj框架的前置通知Before传送门,这篇文章将继续详解Aspectj框架的其它注解。 文章目录💖Aspectj框架介绍✨JoinPoint通知方法的参数✨后置通知AfterReturning✨环绕通知Ar…...
【java】Spring Boot --40 个 Spring Boot 常用注解(建议收藏)
本文目录一、Spring Web MVC 注解Spring Web MVC 注解RequestMappingRequestBodyGetMappingPostMappingPutMappingDeleteMappingPatchMappingControllerAdviceResponseBodyExceptionHandlerResponseStatusPathVariableRequestParamControllerRestControllerModelAttributeCross…...
《游戏学习》| 微信对话模拟生成器源码分析
简介微信对话生成器,是一款在线微信聊天对话制作的工具,它可以设置苹果或安卓状态栏,包括手机电量、手机时间等,还可以设置不同用户的角色,然后发送文字、语音、红包、转账等多种好玩的功能,可谓是一款娱乐…...
剑指 Offer 10- I. 斐波那契数列[c语言]
目录题目思路代码结果该文章只是用于记录考研复试刷题题目 力扣斐波那契数列 写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下: F(0) 0, F(1) 1 …...
【C#基础】C# 数据类型总结
序号系列文章0【C#基础】初识编程语言C#1【C#基础】C# 程序通用结构2【C#基础】C# 基础语法解析文章目录前言数据类型一. 值类型(Value types)二. 引用类型(Reference types)三. 指针类型(Pointer types)结…...
再创荣誉 | Softing工业荣获CAIMRS 2023 数字化创新奖
在刚刚结束的中国工控-第二十一届“自动化及数字化”年度评选(CAIMRS 2023)中,Softing凭借edgeAggregator产品荣获“数字化创新奖”! 经层层筛选,Softing edgeAggregator边缘聚合服务器从中脱颖而出,摘得C…...
Multi Paxos
basic paxos 是用于确定且只能确定一个值,“只确定一个值有什么用?这可解决不了我面临的问题,例如每个用户都要多次保存数据.” 你心中可能有这样的疑问。 原simple paxos论文里有提到一连串个instance of paxos [4] 但没有提出 multi paxos的概念&…...
Android - dimen适配
一、分辨率对应DPIDPI名称范围值分辨率名称屏幕分辨率density密度(1dp显示多少px)ldpi120QVGA240*3200.75(120dpi/1600.75px)mdpi160(基线)HVGA320*4801(160dpi/1601px)hdpi240WVGA4…...
深度学习网络模型——RepVGG网络详解
深度学习网络模型——RepVGG网络详解0 前言1 RepVGG Block详解2 结构重参数化2.1 融合Conv2d和BN2.2 Conv2dBN融合实验(Pytorch)2.3 将1x1卷积转换成3x3卷积2.4 将BN转换成3x3卷积2.5 多分支融合2.6 结构重参数化实验(Pytorch)3 模型配置论文名称: RepVGG: Making V…...
仓库拣货标签应用案例
使用场景:富士康成都仓库 解决问题:仓库亮灯拣选, 提高作业效率和物料明晰展示仓库亮灯拣选使用场景:京东仓库 解决问题:播种墙分拣,合单拣货完成后按订单播种播种墙分拣使用场景:和尔泰智能料…...
介绍一款HCIA、HCIP、HCIE的刷题软件
华为认证考试分为三个等级,分别为工程师HCIA、高级工程师HCIP、专家HCIE,等级越高,考试难度越大。 本篇带大家详细了解华为数通题库刷题工具的详细操作步骤。 操作须知:本款刷题工具为一款刷题小程序,无需安装即可在线…...
线程池整理汇总
它山之石,可以攻玉。借鉴整理线程池相关文章,以及自身实践。 文章目录1. 线程池概述2. 线程池UML架构3. Executors创建线程的4种方法3.1 newSingleThreadExecutor3.2 newFixedThreadPool3.3 newCachedThreadPool3.4 newScheduledThreadPool小结4. 线程池…...
华为OD机试真题Python实现【最短木板长度】真题+解题思路+代码(20222023)
🔥系列专栏 华为OD机试(Python)真题目录汇总华为OD机试(JAVA)真题目录汇总华为OD机试(C++)真题目录汇总华为OD机试(JavaScript)真题目录汇总文章目录 🔥系列专栏题目输入输出示例一输入输出说明示例二输入输出说明...
VMware安装CentOS7
个人简介:云计算网络运维专业人员,了解运维知识,掌握TCP/IP协议,每天分享网络运维知识与技能。个人爱好: 编程,打篮球,计算机知识个人名言:海不辞水,故能成其大;山不辞石…...
力扣24.两两交换链表中的节点
文章目录力扣24.两两交换链表中的节点题目描述方法1:非递归方法2:递归力扣24.两两交换链表中的节点 题目描述 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&…...
业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...
376. Wiggle Subsequence
376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...
智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...
Java编程之桥接模式
定义 桥接模式(Bridge Pattern)属于结构型设计模式,它的核心意图是将抽象部分与实现部分分离,使它们可以独立地变化。这种模式通过组合关系来替代继承关系,从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...
【JVM】Java虚拟机(二)——垃圾回收
目录 一、如何判断对象可以回收 (一)引用计数法 (二)可达性分析算法 二、垃圾回收算法 (一)标记清除 (二)标记整理 (三)复制 (四ÿ…...
4. TypeScript 类型推断与类型组合
一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式,自动确定它们的类型。 这一特性减少了显式类型注解的需要,在保持类型安全的同时简化了代码。通过分析上下文和初始值,TypeSc…...
