首页 > 其他分享 >标准IO流类库 语法练习

标准IO流类库 语法练习

时间:2024-09-14 11:13:41浏览次数:1  
标签:类库 IO 错误 语法 istream 结束符 os

1.编写函数,接受一个istream&参数,返回值类型也是istream&。此函数须从给定流中读取数据,直至遇到文件结束标识时停止。它将读取的数据打印在标准输出上。完成这些操作后,在返回流之前,对流进行复位,使其处于有效状态。

 1 #include <iostream>
 2 using namespace std;
 3 istream& func(istream& os)
 4 {
 5     int v;
 6     while (os >> v, os.eof() != 1)//只有在碰到结束符时才停止输入
 7     {
 8         if (os.bad())
 9             throw runtime_error("IO流错误");
10         if (os.fail())//遇到数据型错误时,必须清空缓冲区
11         {
12             cerr << "数据型错误,重新输入" << endl;
13             os.clear();
14             //清理方式1 ,直接清空缓冲区中的当前新行的剩余数据
15             os.ignore(100,'\n');//必须清理缓冲区,清理错误数据,否则过不去
16             continue;
17         }
18         cout << v << endl;
19     }
20     os.clear();//必须复位恢复流正常状态,后续才可继续使用输入
21     return os;
22 }
23 
24 istream& func2(istream& os)
25 {
26     int v;
27     while (os >> v, os.eof() != 1)//只有在碰到结束符时才停止输入
28     {
29         if (os.bad())
30             throw runtime_error("IO流错误");
31         if (os.fail())//遇到数据型错误时,必须清空缓冲区
32         {
33             cerr << "数据型错误,重新输入" << endl;
34             os.clear();
35             //清理方式2,只清空遇到的错误类型数据,后面正确类型的数据保留。
36             while (!isspace(cin.get()))//只把空白符之前(包括空白符)的错误型数据读取出来扔掉
37                 continue;
38             continue;
39         }
40         cout << v << endl;
41     }
42     os.clear();//必须复位恢复流正常状态,后续才可继续使用输入
43     return os;
44 }
45 int main()
46 {
47     //istream mycin; //错误,不能自定义标准IO流对象,其构造函数都是私有的。
48     func(cin);
49     //用于测试如果不复位,能否继续使用cin,  并不能。
50     //cin.clear();
51     //int v;//继续输入
52     //cin >> v;
53     //cout << v << endl;
54 }

 

标签:类库,IO,错误,语法,istream,结束符,os
From: https://www.cnblogs.com/lichenlong0816/p/18413581

相关文章

  • 迅为RK3588开发板/核心板 | 在高性能处理器上如何使用GPIO
    GPIO基本概念GPIO,即General-PurposeInput/Output,指的是可以由软件控制的通用输入输出引脚。每个GPIO引脚可以配置为输入或输出,用来读取外部设备的状态(如按键)或控制外设(如LED、马达等)GPIO应用领域GPIO作为嵌入式设备中不可或缺的接口,在以下多个领域有广泛应用:●智能家居:用于控制和......
  • chainlit s3 minio 存储集成配置
    chainlits3默认对于minio的支持没有明确说明,但是我们可以通过配置解决(环境变量以及~/.aws/config都可以)使用代码配置importchainlitasclimportchainlit.dataascl_datafromchainlit.data.sql_alchemyimportSQLAlchemyDataLayerfromchainlit.typesimportThreadDic......
  • chainlit 持久化配置问题 null value in column "disableFeedback" of relation "ste
    实际上此问题在github上已经存在了,解决方法很简单,就是对于sql配置的去掉不能为空的判定参考sql修改CREATETABLEIFNOTEXISTSsteps("id"UUIDPRIMARYKEY,"name"TEXTNOTNULL,"type"TEXTNOTNULL,"threadId"UUIDNOTNULL,"parentId"UUID,&qu......
  • java中的Map系列的集合HashMap、HashTable、TreeMap以及Collections和Collection的区
    1.Map的特性特性:key键-value值身份证号--->人可以通过key获取到valueMap它的key是唯一的,Map中的key是无序的而且是不重复的value是可以重复的。Map集合的基本方法:Vput(Kkey,Vvalue)添加元素如果put的key存在那么会用新的value的值替换掉原有的value值key......
  • 基于CNN-LSTM-Attention的共享单车租赁预测研究(数据可换)(Python代码实现)基于CNN-LSTM
                        ......
  • PERIOD - Period(kmp求border)
    #include<bits/stdc++.h>usingnamespacestd;#definexfirst#defineysecondtypedefpair<int,int>PII;typedeflonglongll;typedefunsignedlonglongull;typedefunsignedintuint;typedefvector<string>VS;typedefvector<int>......
  • warkdown语法基础
    warkdown语法标题:#+标语提名字(一级标题)+名字(二级标题,依次增加)字体内容两边加上两个*,表示粗体​一个*,表示斜体​三个*,表示斜体+加粗内容(两边加上两个~)引用一个>分割线三个-或三个*图片!+[图片名字]+(地址)可以是......
  • iOS开发----轮播图实现
    在iOS开发中,实现图片轮播的方法有很多,在这里介绍三种方法。轮播图片资源准备——SDWebImage这里我们通过第三方库SDWebImage来加载网络图片首先通过CocoaPods下载:接着,从网站上找想要轮播图片的地址,复制下来,y一般是下图这样,在代码中,使用UIImageView的扩展方法sd_setImage......
  • AV1 Bitstream & Decoding Process Specification--[4]:语法结构
    原文地址:https://aomediacodec.github.io/av1-spec/av1-spec.pdf没有梯子的下载地址:AV1Bitstream&DecodingProcessSpecification摘要:这份文档定义了开放媒体联盟(AllianceforOpenMedia)AV1视频编解码器的比特流格式和解码过程。规范:此文档规定了开放媒体联盟(Alliance......
  • Java 21的Collections Framework的笔记
    JavaCoreLibrariesJavaCollectionsFrameworkCreatingUnmodifiableLists,Sets,andMaps相对于普通的容器类,不可变容器的对象,占用的内存少,内存利用更高效。在仅有只读操作时,使用不可变容器的对象,会有性能和空间方面的优势。不可变List的构建样例代码,如下:List<St......