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

news2024/11/24 6:42:08

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

    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一样。



好了朋友们我们今天的内容到这就结束了,今天的内容到这里就结束了,如果有啥不会的朋友记得论坛里面提问哈~

如果朋友你感觉文章的内容对你有帮助,可以点赞关注文章和专栏以及关注我哈,嘿嘿嘿我会定期更新文章的,谢谢朋友你的支持哈

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

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

相关文章

适用于iOS的远程桌面软件

全球远程桌面软件市场最近达到19.2亿美元&#xff0c;表明使用任意设备实现随处远程控制越来越受欢迎。 近年来&#xff0c;企业的运营方式发生了重大改变&#xff0c;远程桌面软件已成为广泛使用的解决方案。Splashtop 是目前最好用的远程桌面工具之一&#xff0c;安全可靠且…

Leetcode:198. 打家劫舍、213. 打家劫舍 II、337. 打家劫舍 III(C++)

目录 198. 打家劫舍 问题描述&#xff1a; 实现代码与解析&#xff1a; 动态规划&#xff08;版本一&#xff09;&#xff1a; 原理思路&#xff1a; 动态规划&#xff08;版本二&#xff09;&#xff1a; 原理思路&#xff1a; 213. 打家劫舍 II 问题描述&#xff1a…

消息中间件----内存数据库 Redis7(第2章 Redis 的安装与配置)

这里是要将 Redis 安装到 Linux 系统中。2.1Redis 的安装2.1.1 克隆并配置主机我这里面的虚拟机里面已经安装过CentOS7系统 在这个系统里面已经关闭了防火墙 已经安装过jdk tomcat maven mysql maven现在我们克隆出来修改名字vim /etc/hostname键盘输入i改成redisesc :wqvim …

Python 类属性与实例属性

原文链接&#xff1a;https://blog.csdn.net/windyJ809/article/details/118197946 首先我们简要说下类属性与实例属性在概念上的不同之处&#xff1a; 类属性是在类中定义的属性&#xff0c;它是和这个类所绑定的&#xff0c;这个类中的所有对象都可以访问。访问时可以通过类…

Android NFC 标签读写Demo与历史漏洞概述

文章目录前言NFC基础1.1 RFID区别1.2 工作模式1.3 日常应用NFC标签2.1 标签应用2.2 应用实践2.3 标签预览2.4 前台调度读写Demo历史漏洞总结前言 NFC 作为 Android 手机一个重要的短距特性&#xff0c;基本在所有 Android 中高端机型上均有支持&#xff0c;但说实话本人原先却…

存储硬件与协议

存储硬件与协议存储设备的历史轨迹存储介质的进化3D NAND3D XPointIntel Optane存储接口协议的演变NVMeNVMe-oF网络存储技术1&#xff09;DAS2&#xff09;NAS3&#xff09;SAN4&#xff09;iSCSIiSCSI层次结构存储设备的历史轨迹 1.穿孔卡2.磁带3.硬盘4.磁盘&#xff08;软盘…

【2023】【standard-products项目】中查找的问题与解决方案 (未完待续)

10、el-table 判断是多选操作还是单选操作 9、判断数组对象中是否包含某个指定值 需求&#xff1a;修改时数据回填el-select下拉数据&#xff0c;发现当前id在原数组里没有找到&#xff0c;就显示了id值&#xff0c;应该显示name名&#xff0c; 处理&#xff1a;当查找到id…

向量与矩阵 导数和偏导数 特征值与特征向量 概率分布 期望方差 相关系数

文章目录向量与矩阵标量、向量、矩阵、张量向量范数和矩阵的范数导数和偏导数特征值和特征向量概率分布伯努利分布正态分布&#xff08;高斯分布&#xff09;指数分布期望、⽅差、协⽅差、相关系数期望方差协⽅差相关系数向量与矩阵 标量、向量、矩阵、张量 标量&#xff08;…

源码系列 之 ThreadLocal

简介 ThreadLocal的作用是做数据隔离&#xff0c;存储的变量只属于当前线程&#xff0c;相当于当前线程的局部变量&#xff0c;多线程环境下&#xff0c;不会被别的线程访问与修改。常用于存储线程私有成员变量、上下文&#xff0c;和用于同一线程&#xff0c;不同层级方法间传…

Jenkins 笔记

Jenkins brew install jenkins-lts brew services restart jenkins-lts brew services stop jenkins-lts b999ff5683464346b6d083f894968121 l 软件构建自动化 &#xff1a;配置完成后&#xff0c;CI系统会依照预先制定的时间表&#xff0c;或者针对某一特定事件&#xff0c;…

进阶C语言第三章-------《字符函数和内存函数》 完整思维导图+基本练习题+深入细节+通俗易懂+知识点+建议收藏

绪论 书接上回&#xff0c;通过进阶指针你已经了解到了更多种指针类型&#xff0c;他们的用法及使用之处相当的关阔需要不断的积累经验来使用&#xff0c;这里我毛遂自荐一下我的指针练习希望对你有帮助&#xff0c;本章是一些关于字符串的函数介绍和自己实现&#xff0c;总体来…

数据结构与算法基础-学习-11-线性表之链栈的初始化、判断非空、压栈、获取栈长度、弹栈、获取栈顶元素

一、个人理解链栈相较于顺序栈不存在上溢&#xff08;数据满&#xff09;的情况&#xff0c;除非内存不足&#xff0c;但存储密度会低于顺序栈&#xff0c;因为会多存一个指针域&#xff0c;其他逻辑和顺序表一致。总结如下&#xff1a;头指针指向栈顶。链栈没有头节点直接就是…

智慧校园应用系统建设方案

系统简介 建设“智慧校园”的核心是创新新形势下高校发展理念、推进高校建设转型、变革高校管理行为方式&#xff1b;建设“智慧校园”的目的是推进信息化进入高校、服务管理、惠及师生&#xff1b;建设“智慧”的目标是实现 “信息采集、数据整合、信息促管、信息育人、信息联…

linux之echo使用技巧

参考文章&#xff1a;linux基本功系列-echo命令实战一、echo 命令是什么&#xff1f;作用&#xff1a; echo命令能将指定文本显示在Linux命令行上&#xff0c;或者通过重定向符写入到指定的文件中。语 法&#xff1a;echo [-ne][字符串] / echo [–help][–version]补充说明&am…

VMware安装CentOS7

个人简介&#xff1a;云计算网络运维专业人员&#xff0c;了解运维知识&#xff0c;掌握TCP/IP协议&#xff0c;每天分享网络运维知识与技能。个人爱好: 编程&#xff0c;打篮球&#xff0c;计算机知识个人名言&#xff1a;海不辞水&#xff0c;故能成其大&#xff1b;山不辞石…

Java+Python+HanLP自然语言处理包实现解析文本分词

目录 需要安装 Python部分 Java部分 需要安装 HanLP官网Api教程 https://bbs.hanlp.com/t/hanlp2-1-restful-api/53 首先需要电脑安装Python环境并配置环境变量&#xff08;网上搜就可以一大堆教程&#xff09;&#xff0c;建议Python版本3 然后根据HanLP官网教程安装hanl…

「JVM 原理使用」 实际开发中的应用

Class 文件格式、执行引擎主要以 Class 文件描述了存储格式、类何时加载、如何连接、VM 如何执行字节码指令&#xff0c;这些动作基本都是 JVM 直接控制&#xff0c;用户代码无法干预和改变&#xff1b; 用户可以干预的只有字节码生成、类加载器两部分&#xff0c;而这两部分的…

Android 面试 基础知识汇总

Android常用的设计模式HTTP和HTTPS的区别TCP/UDP的区别

PendingIntent兼容安卓12 的一个问题

这是我第一次遇到这个问题&#xff0c;反正我也是第一次做完整的安卓app&#xff0c;很多个第一次。我之前做的那个老旧手机做桌面摆件的app&#xff0c;因为原来的“无干预”版本无法使用&#xff0c;所以又用回了“和风版”&#xff0c;但这个版本很久没用了&#xff0c;有些…

实用机器学习-学习笔记

文章目录9.1模型调参9.1.1思考与总结9.1.2 基线baseline9.1.3SGD ADAM9.1.4 训练代价9.1.5 AUTOML9.1.6 要多次调参管理9.1.7复现实验的困难9.1模型调参 9.1.1思考与总结 1了解了baseline和调参基本原则 2了解了adams和sgd的优劣 3了解了训练树和神经网络的基本代价 4了解了a…