C++学习笔记之输入输出语句

C++学习笔记系列之输入输出语句

自学C++有时总会提不起干劲,搁置几个月后又会忘记之前比较重要的点,因此我开了这个学习笔记系列,希望在自己的学习过程中能督促我自己的学习,同时遇到问题时希望可以借助该系列博客复习、提醒,也希望能帮助一些其他的C++学习者。1.

目录

  • C++学习笔记系列之输入输出语句
    • 目录
    • 标准I/O流(Standard I/O Statement)
    • 流状态(Stream States)
    • 有参数的三个常用流状态
    • 与<<连用的设置方式
    • 文件流(File Streams)

标准I/O流(Standard I/O Statement)

输入输出语句用于人机交互过程中数据的获取和显示,而流是和C++语言工具绑定的资源库。C++提供的标准输入/输出库就是头文件“”iostream。其中“cin>>”和“cout<<”是常用的流入和流出的操作符。
其中“cin”即从输入设备流入,“>>”为提取符,“cout”即流出到输出设备,“<<”为插入符。另外还有“cerr”和“clog”,关于他们与“cout”的区别,在[zx824的这篇博客]中讲的比较清楚。(http://blog.csdn.net/zx824/article/details/6644455)

流状态(Stream States)

流主管数据类型的识别和操作,在C++中,可以通过对输出流状态的方式操作输出数据的对齐、宽度、精度、数制等格式。常用的流状态有:

流状态 功能
shoepos 在正数前显示+号(包括0)
showbase 十六进整数前加0X,八进制整数前加0
uppercase 十六进制格式字母用大写表示(默认是小写)
showpoint 浮点输出即使小数点后都为0也加小数点
boolalpha 逻辑值1和0使用布尔型变量true和false表示
left 左对齐(填充字符在右边)
right 右对齐(填充字符在左边)
dec 十进制显示整数
hex 十六进制显示整数
oct 八进制显示整数
fixed 定点数格式输出(默认有效位为六位)
scientific 科学计数法格式输出

取消流状态的操作为:
noshowpos, noshowbase, nouppercase, noshowpoint, noboolalpha
left 和 right 是对立的;dec、oct、hex也是相互独立的;fixed 与 scientific 和一般的显示方式三者也是独立的,不过他们的取消需要用 cout 捆绑函数调用:
例: cout.unsetf(ios::scientific);

有参数的三个常用流状态

width(int) //设置显示宽度
fill(char) //设置填充字符(默认为空格)
precision(int) //设置有效位数

这三个流状态是以 cout 捆绑调用的形式设置的,不能与流出符<<连用。
其中, width(int) 为一次性操作, 例如:
//width(int)的使用测试
cout.width(5);
cout.fill('s');
cout<<23<<23;

输出结果为: sss2323

与<<连用的设置方式

在另一个头文件 “iomanip” (输入输出操纵器)中提供了另外一种与流出符<<连用的设置方式。
setw(int) //设置宽度
setfill(char) //设置填充字符
setprecision(int)
//设置精度或有效位数
例如:
cout << setfill('$') << setw(6) << 27 << endl; //setw和setfill的顺序可随意

文件流(File Streams)

在C++中使用流的概念来进行文件操作可以减少维护的工作量,增加重用性,也可以提高处理速度。许多程序是通过数据文件来获取数据,这让程序更具有实际的意义。
文件可以分为文本文件二进制文件 ,文本文件的内容都是与ASCII码表对应的,二进制文件可以看做是0/1串,一般以字节为单位。
有一个对应磁盘存储的文件名称,然后以输入输出的方式来规定文件操作的性质,就可以进行文件的读或写了。这里的概念还是挺重要的。
ifstream fin(filename, openmode=ios::in); //ifstream为类型名,定义了fin为文件流的名称
ofstream fout(filename, openmode=ios::out);//ofstream为类型名,定义了fout为文件流的名称

filename为外部文件名,openmode为打开方式,ifstream 默认为 ios::in(输入方式),ofstream 默认为 ios::out(输出方式),在打开已存在的文件和新建一个输出文件时可省略。
例如:复制文件 in.txt 的内容到 out.txt 中
//fun: 复制文件
//头文件:
//输入文件in.txt必须和程序放在同一文件目录下,才能成功的复制。
int main(){
ifstream in("in.txt");
ofstream out("out.txt");
for (string str; getline(in, str);)/*从输入文件流读入一行数据(丢失了换行符,edl 补上,当文件结束或文件损坏导致读取失败时,循环结束)*/
out << str << endl;
while (1);
}

可以看出,对文件的操作十分的简单,也无需人为关闭文件操作。而且许多的输入/输出语句都能返回操作状态(true或false),例如:
if (cin >> a)
cout << a;
if (getline(in, str))
cout << str;

可以使用其返回的状态简化程序。


  1. 教材:C++程序设计教程(清华大学出版社第二版). ↩

你可能感兴趣的:(C++学习笔记,I/O,Statements)