C++的流类库与输入输出
C# 数据的输入和输出

Console.Write Line("\n{0:F}\n{0:F4}", a);
using System;
class MyReadline
{
public static void Main()
{
int i;
string str;
Console.Write("请输入你的姓名:");
str= Console.ReadLine();
Console.Write("用户的姓名为:");
5.2.1 数据的格式化
一般实现把数字转换为指定格式的字符串输出的基本方式有3种:
Write()和WriteLine()方法可以直接把数值类型变量的值,转换成字符串输出到控制台中,并可使用格式说明符 来控制输出的数据格式。
Write()方法用来向控制台输出一条信息,并且光标仍在输出信息的末尾。一般Write()方法中有以下两种常用的 形式:
C#的控制台I/O主要是通过命名空间System中的类Console来实现的,该类给出了标准的输入和输出 的方法,这些方法可用于从控制台读写字符。
本章介绍的内容不是任何C#语法,而是.NET框架中常用的控制台输入/输出的类和方法的使用格式。
本章学习重点:
掌握在控制台中输入/输出数据的方法 掌握输出格式化数据的方法 掌握处理字符串的方法
程序运行结果:
请从键盘输入一个字符:a (回车) 97 a
5.1.1 Console.Read()方法
【例5.2】通过Read()方法从控制台接收用户输入的一系列字符,然后把用户输入的内容显示出来。
using System;
class MyRead2
《C++程序设计》电子教案第10章 流类库与输入输出

C++中所有流都是相同的 , 但文件可以不同 。 中所有流都是相同的, 但文件可以不同。 中所有流都是相同的 使用流以后, 使用流以后 , 程序用流统一对各种计算机设备 和文件进行操作,使程序与设备、 和文件进行操作 , 使程序与设备 、 程序与文件 无关,从而提高了程序设计的通用性和灵活性。 无关 , 从而提高了程序设计的通用性和灵活性 。 也就是说, 也就是说 , 无论与流相联系的实际物理设备差 别有多大,流都采用相同的方式运行。 别有多大 , 流都采用相同的方式运行 。 这种机 制使得流可以跨越物理设备平台, 制使得流可以跨越物理设备平台 , 实现流的透 明运作,而与实际的物理设备无关。例如, 明运作 , 而与实际的物理设备无关 。 例如 , 往 显示器上输出字符和向磁盘文件或打印机输出 字符,尽管接受输出的物理设备不同, 字符 , 尽管接受输出的物理设备不同 , 但具体 操作过程是相同的。 操作过程是相同的。
返回本节
10.2 格式化 格式化I/O
10.2.1 10.2.2 10.2.3 10.2.4 ios类中的枚举常量 类中的枚举常量 使用ios成员函数 使用 成员函数 使用I/O操作符 使用 操作符 检测流操作的错误
返回首页
10.2.1 ios类中的枚举常量 类中的枚举常量
在根基类ios中定义有三个用户需要使用的枚举类型, 在根基类 中定义有三个用户需要使用的枚举类型,由 中定义有三个用户需要使用的枚举类型 于它们是在公用成员部分定义的, 于它们是在公用成员部分定义的,所以其中的每个枚举类 型常量在加上ios::前缀后都可以为本类成员函数和所有外 型常量在加上 前缀后都可以为本类成员函数和所有外 部函数访问。 部函数访问。 在三个枚举类型中有一个无名枚举类型, 在三个枚举类型中有一个无名枚举类型,其中定义的每个 枚举常量都是用于设置控制输入输出格式的标志使用的。 枚举常量都是用于设置控制输入输出格式的标志使用的。 该枚举类型定义如下: 该枚举类型定义如下: enum { skipws,left,right,internal,dec,oct,hex,sh owbase,showpoint, uppercase,showpos,scientific,fixed,unitbuf, stdio };
第10章 C++语言的输入与输出-面向对象程序设计(C++语言)(第二版)-程磊-清华大学出版社

设置状态标志flags 清楚状态标志,并返回前状态标志 测试状态标志 设置标志flags, 并返回前状态标志 返回当前的宽度设置值 设置域宽w,返回以前的设置 设置小数位数p,返回以前的小数位数 返回当前的填充字符 设置填充字符ch,返回当前的填充字符
13
下面分别介绍这些成员函数的使用方法;
(1)设置状态标志:
cout<<”x_width=”<<cout.width( )<<endl; cout<<”x_fill=”<<cout.fill ( )<<endl; cout<<”x_precision=”<<cout.precision( )<<endl; cout<<123<<” ”<<123.45678<<endl; cout<<”______________________________\n”; cout<<”*** x_width=10,x_fill=, x_precision=4 ***\n”; cout.width(10); cout.precision(4); cout<<123<<” ”<<123.45678<<” ”<<234.567<<endl;
1. C++的流概述 ❖ 在C++中,输入输出流被定义为类,称为流类。 ❖ I/O 系 统 仍 然 是 以 字 节 流 的 形 式 实 现 的 , 流
(Stream)实际上就是一个字节序列,流总是 与某一设备相联系的,它既可以从输入设备 (如键盘、磁盘等)流向计算机内存,亦可以 从计算机内存流向输出设备(如显示器、打印 机、磁盘等)。 ❖ 输入输出的字节可以是ASCII字符、内部格式 的原始数据、图形图像、数字音频、视频等。
C++:流类库与输入输出

C++:流类库与输⼊输出7.2.1 C++的输⼊输出流ios:流基类(抽象类)istream:通⽤输⼊流类和其他输⼊流的基类ostream:通⽤输出流类和其他输出类的基类iostream:通⽤输⼊输出流类和其他输⼊输出流类的基类(以下的派⽣类对象有cin、cout、cerr、clog)ifstream:输⼊⽂件流类ofstream:输出⽂件流类fstream:输⼊输出⽂件流istrstream:输⼊字符串流类ostrstream:输出字符串流类strstream:输⼊输出字符串类iostream_withassign: 通⽤输⼊输出流类和其他输⼊输出流类iostream的的派⽣类7.2.2 预定义的流对象C++中包含⼏个预定义的流对象,它们是标准输⼊流对象cin、标准输出流对象cout、⾮缓冲型的标准出错流对象ceer、缓冲型的标准出错流对象clogcin是istream的派⽣类istream_withassign的对象,它与标准输⼊设备(通常是键盘)相联系。
cout是ostream的派⽣类ostream_withassign的对象,它与标准输出设备(通常是显⽰器)相联系。
ceer是ostream的派⽣类ostream_withassign的对象,它与标准错误输⼊设备(通常是显⽰器)相联系。
clog是ostream的派⽣类ostream_withassign的对象,它与标准错误输⼊设备(通常是显⽰器)相联系。
由于istream和ostream类都在头⽂件iostream中声明的,因此只要在程序中包含头⽂件iostream.h,C++程序开始时这四个标准流对象的构造函数都被⾃动调⽤。
7.2.3 输⼊输出流的成员函数(1)put函数put函数⽤于输出⼀个字符格式:cout.put(char ch)例如:cout.put('A')===cout.put(65)===cout.put(25+40)(2)get函数get函数的功能与提取运算符>>类似,主要不同之处是get函数在读⼊数据时可以包括空⽩字符,⽽后者不可以。
10 文件流类

10.2 标准I/O流
常用函数:
• 设置输入/输出宽度函数:setw(int)
• 设置输出填充字符函数:setfill(int)
• 设置输出精度函数:setprecision(int) • 设置输入/输出整型数数制函数:dec、hex和oct • 取消输入结束符函数:ws • 控制换行操作符:endl • 代表输出单字符‚\0”的操作符:ends
其实,所谓输入输出,是相对于内存而言的。 在C++程序中,数据可以从程序流向屏幕或磁盘文件,也可以从键盘或 磁盘文件流入到程序中。 换一种角度,简单说,I/O流就是一系列写到屏幕或从键盘读出的各种 字符。 从流中获取数据的操作称为提取(或抽取)操作。 向流中添加数据的操作称为插入操作。 如下图所示:
第10单元 输入输出流
基本概念 标准I/O流 文件I/O流
串I/O流
10.1 基本概念
一、为什么要有C++流类库
C语言中的输入输出系统不支持自定义的对象或数据类型。
如有下面的定义:
struct sample {
int i ;
float f; char *ch; }s1; 不能用下面的输出函数来输出以上结构变量s1: printf(“%sample”,s1);
10.2 标准I/O流
【例】 void main( )
{
char str[]="You will be the C++ master !"; cout.write(str,sizeof(str)-1); cout<<endl; cout.write(&str[4],4) <<endl; }
cin,cout用法详解

在C中,输入输出要用printf和scanf,这是2个很麻烦的东西,因为在输入数据的同时还要说明数据的类型,如果输入数据较多,那就很麻烦了,所以我们的C++搞了两个更爽的东西cout和cin,来替换它们.首先我们先了解一下这两个东西的来处,它们是来自C++的一个类库叫 " iostream".iostream是由istream(输入类)和ostream(输出类)派生.所以在iostream中就有了输入和输出的相关对象:1,cin,表示标准输入(standard input)的istream类对象.cin使我们可以从设备读取数据.2,cout,表示标准输出(standard output)的ostream类对象.cout使我们可以向设备输出或者写数据.3,cerr(暂时还没试过,先别理吧)暂时先介绍那么多,这里我主要想说的是cin.get()和cin.getline(),cin.clear(),cin.sync()等的用法.首先看看cin.get(),它是一个读取单个字符的方法.字符变量=cin.get();相当于cin.get(字符变量);#include<iostream>usingnamespace std;int main(){char cstr;cstr=cin.get(); //读取单个字符,在屏幕输入,也相当于cin.get(cstr);cout<<cstr<<endl; //输出刚刚载入的单个字符system("pause");}运行程序后,一切正常:输入:a 输出:a但当我们输入的不只一个英文字符时,那又会如何呢?输入:abcd 输出:a由此可知,它只能读取第一个字符,但如果我们把程序修改成:int main(){char cstr;char bstr;cstr=cin.get(); //读取单个字符,在屏幕输入bstr=cin.get();cout<<cstr<<bstr<<endl; //输出刚刚载入的单个字符system("pause");}我们再输入:abcd 最后输出了:ab既然cin.get()是读取第一个字符,那bstr为什么不也是a呢?其实原理是这样的:在cin这个对象里,有一个储存字符的流,可以想象成缓冲区,但事实上是cin里封装的一个东西.当我们在程序上输入字符后,对象cin获得了我们输入的字符,例如获得abcd,然后再通过.get()把流里面的第一个字符去掉,赋给cstr,这时,cin里储存的流的数据为bcd,而cstr则获得了 a.当我们再次运行bstr=cin.get();时,同理把cin里流的数据的b拿出来给了bstr,此后,cin里面的流的数据为cd,而bstr则为b,所以最后输出时,便能输出ab了.还有个补充,究竟什么时候才输入数据呢?我们可以再通过上面的代码进行尝试,我们输入单个字母'a',然后按回车,发现并没有输出数据,而是再等待一次输入数据,我们再输入字母'b',按回车后便输出ab了.相信到这里,大家都应该明白了,因为当我们第一次输入a后,通过cstr=cin.get();使cin里的流没有数据,清空了.所以到第二次要再赋给bstr值时,它找不到数据,要重新再输入数据.由此来看可以知道,当cin里的流数据清空时,便需要重新输入才能赋值.而cin.get()还有个用法:int main(){char cstr;char bstr;cstr=cin.get(); //读取单个字符,在屏幕输入cin.get();bstr=cin.get();cout<<cstr<<bstr<<endl; //输出刚刚载入的单个字符system("pause");}程序中有3个cin.get(),所以我们尝试输入:abc. 发现输出了:ac由此能知道,当空回调cin.get();时,cin.get便自动在cin中的流数据中删除一个字母,起了一个删除作用.对cin.get()有了一定了解之后,对cin.getline()的学习就可以更快了,原理是一致的,但是cin.getline()则是获取一整行文本.以下是cin.getline()原形: getline(char *line,intsize,char='\n')第一个就是字符指针,第二个是字符长度,第三个1行的结束标识符.int main(){char cstr[200];cin.getline(cstr,sizeof(str));//第三个参数不输入,默认回车为结束标识符cout<<cstr<<endl; //输出system("pause");}这样我们输入一堆英文或数字,然后按回车,就会输出一行刚刚输出的东西了.接下来.我们讨论第三个参数的作用.int main(){char cstr[200];cin.getline(cstr,sizeof(str),'X'); //我们以单个英文字母'X'作为终止标识符cout<<cstr<<endl; //输出system("pause");}当我们输入一大堆东西,例如输入: kkkkkkk(回车) 输出: kkkkkkk(回车)llllllx(回车) llllll这样X便成了终止符,其原理和cin.get一样.或许我们可以像cin.get那样尝试一下:int main(){char cstr[200];char bstr[200];cin.getline(cstr,sizeof(str),'X'); //我们以单个英文字母'X'作为终止标识符cin.getline(bstr,sizeof(btr),'a');cout<<"第一行是:"<<cstr<<endl; //输出cout<<"第二行是:"<<bstr<<endl;system("pause");}我们输入:kkkkkkkkk(回车) 输出:第一行是:kkkkkkkkk(回车)oooooooooX(回车) oooo ooooo(回车)bbbbbbbbba(回车) 第二行是:(回车)bbbbbbbbb在这里,我在不厌其烦地说一下原理,如果刚刚cin.get()原理看懂的可以跳过. 首先,我们第一次getline会把X前面的字符赋给cstr,然后从cin里的数据流删除,标识符X也删除了,所以输出的cstr如上所示.当我们第二次运行getline 时,此时cin里的数据流为(回车)bbbbbbbbba,回车也是一个字符,事实上在数据流里用"\n"表示,接着就按照原来第一次的方法,把标识符'a'前面的字符赋给bstr,然后再删除字符号及标识符.所以输出结果如上.接下来我们谈谈cin.clear的作用,第一次看到这东西,很多人以为就是清空cin 里面的数据流,而实际上却与此相差很远,首先我们看看以下代码:#include<iostream>usingnamespace std;int main(){int a;cin>>a;cout<<cin.rdstate()<<endl;if(cin.rdstate() == ios::goodbit){cout<<"输入数据的类型正确,无错误!"<<endl;}if(cin.rdstate() == ios_base::failbit){cout<<"输入数据类型错误,非致命错误,可清除输入缓冲区挽回!"<<endl; }system("pause");}我们定义要输入到的变量是整型,但如果我们输入了英文字母或者汉字,那就会发生错误,cin里有个方法能检测这个错误,就是cin.rdstate();当cin.rdstate()返回0(即ios::goodbit)时表示无错误,可以继续输入或者操作,若返回4则发生非致命错误即ios::failbit,则不能继续输入或操作.而cin.clear则可以控制我们此时cin里对这个问题的一个标识.语发如下:cin.clear(标识符);标识符号为:∙goodbit 无错误∙Eofbit 已到达文件尾∙failbit 非致命的输入/输出错误,可挽回∙badbit 致命的输入/输出错误,无法挽回若在输入输出类里.需要加ios::标识符号通过cin.clear,我们能确认它的内部标识符,如果输入错误则能重新输入.结合真正的清空数据流方法cin.sync(),请看下例:#include<iostream>usingnamespace std;int main(){int a;while(1){cin>>a;if(!cin) //条件可改写为cin.fail(){cout<<"输入有错!请重新输入"<<endl;cin.clear();cin.sync(); //清空流}else{cout<<a;break;}}system("pause");}上面的cin默认参数为0,即无错误,正常操作.当我们输入英文字母'k'时,它的状态标识改为fail(即1),即错误,用cout对用户输出信息,再用cin.clear 让错误标识改回为0,让我们可以继续输入,再清空流数据继续输入.如果我们没有了cin.clear,则会进入死循环,其过程为我们输入了英文字母,它的状态标识便为fail,当运行到条件判断时,便总是回到错误的条件表示里,并且我们再也没办法输入,因为错误的表示关闭了cin,所以会进入死循环.对比:输入字符串1.cin>>的读入方式总是将前导的空格(包括空格,回车,水平或垂直制表符等)过滤2.getline可将字符串一次性地输入。
c++11-流类库与输入输出

6
输 插入运算符(<<) 插入运算符( ) 出 流
插入(<<)运算符是所有标准C++数据类型预先 设计的。 用于传送字节到一个输出流对象。
7
控制输出格式
输 出 流
控制输出宽度
–
为了调整输出,可以通过在流中放入setw操纵符或调用width成 员函数为每个项指定输出宽度。
例11-1 使用width控制输出宽度
8
输 例:使用 填充 使用*填充 出 流
#include <iostream> using namespace std; void main() { double values[]={1.23,35.36,653.7,4358.24}; for(int i=0; i<4; i++) 输出结果: 输出结果: { cout.width(10); ******1.23 ******1.23 cout.fill('*'); cout<<values[i]<<'\n'; *****35.36 } *****653.7 } ***4358.24
12
输 进制 出 流
dec、oct和hex操纵符设置输入和输出的缺省进 制。
13
输 输出文件流成员函数 出 流
输出流成员函数有三种类型:
– – –
与操纵符等价的成员函数。 执行非格式化写操作的成员函数。 其它修改流状态且不同于操纵符或插入运算符的成 员函数。
14
输 输出文件流成员函数 出
open函数
ifstream myFile;//建立一个文件流对象 myFile.open("filename",iosmode); myFile.open("filename",iosmode); //打开文件 打开文件"filename" //打开文件"filename"
第7章 输入输出流

第7章 输入输出流
第7章 输入输出流
(2)返回流是否处于正常状态 :int fail() const; 该函数返回failbit状态,以判断流操作是否失败。failbit表 示发生流格式错误,但缓冲区中的字符没有丢失。这种错误通常 是可以修复的。 (3)判断流是否正常 int good()const; int operator void *(); 上述两个函数的功能相似,如果eofbit、failbit和badbit全 部都没有被置位[即均为 0,读写正常(即符合读取和写入的类 型),没有文件末尾],则返回1 (true),否则返回0 (false)。
第7章 输入输出流
C++程序设计
第7章 输入输出流
第7章 输入输出流
流类简介 标准流对象 控制 I/O 格式 调用cout的成员函数 调用cin的成员函数
本章内容
第7章 输入输出流
第一节 流类简介
常考知识点: C++流的基本概念 iostream中流类库的基本概念 主要头文件的基本功能 提取运算符>>的使用 插入运算符<<的使用
(1)返回流是否结束: int eof() const; 函数返回eofbit的值。当文本文件结束时,在输入流中会 自动设置eofbit。在应用程序中可以用eof( )函数测试是否到达 文件尾,当文件操作结束遇到文件尾时,函数返回1;否则返回0。 在标准输入流cin中,可以通过按下〈Ctrl+Z〉组合键表示 输入流的结束。
第7章 输入输出流
(3)设置和返回输出宽度 int width(int nw); 该函数将下一个输出项的显示宽度设置为nw。如果nw大于 数据所需宽度,则在没有特别指示时数据采用右对齐方式。如果 nw小于数据所需宽度,则nw无效,数据以默认格式输出。函数 width()的设置没有持续性,输出一项数据后自动恢复为系统默 认设置。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
cout<<endl;
for(i=1;i<=i;i++)
{
cout<<i;
for(j=1;j<=9;j++)
cout<<i*j;
}
return 0;
}
【修改语句】
2、下面的程序用于统计文件xyz.txt中的字符个数,请填空完成程序。
#include<iostream>
#include<fstream>
《C++面向对象程序设计》实验报告
实验序号:6实验项目名称:C++的流类库与输入输出
学 号
姓 名
专业
实验地点
指导教师
吴芸
实验时间
一、实验目的及要求
(1)掌握C++格式化的输入输出方法;
(2)掌握重载“<<ቤተ መጻሕፍቲ ባይዱ和“>>”的方法;
(3)掌握磁盘文件的输入输出方法;
二、实验设备(环境)及要求
Micorsoft Visual C++ 6.0
{(2)
i++;
}
cout<<"文件字符个数:"<<i<<endl;
return 0;
}
【运行结果截图】:
3、重载运算符“<<”和“>>”,使其能够输入一件商品的信息和输出这件商品的信息。商品信息有编号,商品名和价格。
【商品类Merchandise框架】:
class Merchandise{
public:
Merchandise();
~Merchandise();
friend istream& operator>>(istream &in,Merchandise &s); //输入一件商品的信息
friend ostream& operator<<(ostream &out,Merchandise &s);//输出一件商品的信息
private:
int no; //编号
char *name; //商品名
double price; //价格
};
【要求】:实现该类,并编写一下的main函数对该类进行操作。
int main()
{ Merchandise mer;
cin>>mer;
cout>>mer;
return 0;
}
【运行结果截图】:
4、编写一个程序,将两个文本文件连接成一个文件,然后将此文件中所有小写字母转换成大写字母,并打印出来。
【运行结果截图】:
四、分析与讨论(记录实验过程中出现的主要问题和心得体会)
五、教师评语
签名:
日期:
成绩
附:程序源代码
1、
2、
3、
4、
using namespace std;
int main()
{
char ch;
int i=0;
ifstream file;
file.open("xyz.txt",ios::in);
if((1))
{ cout<<"xyz.txt cannot open"<<endl;
abort();
}
while(!file.eof())
三、实验内容与步骤(题目、算法和结果描述)
1、下面给出的程序是用于打印九九乘法表,但程序有错误,请调试,使得程序运行后,能够输出如下显示的九九乘法表
#include<iomanip>
using namespace std;
int main()
{
int i,j;
cout<<"*";
for(i=1;i<=9;i++)