文章目录
基本概念
- 从键盘到程序 标准输入 input
- 从程序到显示器 标准输出 output
- 标准输入+标准输出=标准I/O
- 文件的输入和输出叫做文件I/O
标准IO的对象
- cerr : 没有缓冲区
- clog 、cin、 cout :有缓冲区
cin
- cin.get() :读取一个字符,返回值是字符,也可以传入形参,读完之后缓冲区就没有这个字符
- cin.get(ch) : 读取一个字符给ch
- cin.get(ch,10) : 读取10个字符(最后一个\0)给ch
char ch[256];
cin.get(ch,3);
cout << ch << endl;
cin.ignore(2);
cin.get(ch,3);
cout << ch << endl;
输入 abcdefg
输出 ab
ef
- cin.getline() : 读取一行的字符,默认遇到换行结束
char ch[10];
cin.get(ch, 5, '5');//遇到‘5’结束,5这个字符还在缓冲区,下次读取的是5
cout << ch << endl;
char c;
cin.get(c);
cout << c << endl;
输入 : 125678
输出 : 12
5
------------------------------------------
char ch[10];
cin.getline(ch, 5, '5');// 5这个字符不在缓冲区,下次读取的是5后面的字符,将5忽略了
cout << ch << endl;
char c;
cin.get(c);
cout << c << endl;
输入 : 125678
输出 : 12
6
- cin.ignore() : 忽略当前字符(从缓冲区取走了),形参表示忽略几个字符,默认一个。
char ch;
cin.get(ch);
cout << ch << endl;
cin.ignore();
cin.get(ch);
cout << ch << endl;
输入 abc
输出 a
c
-
cin.peek() : 返回缓冲区的第一个字符,但是还在缓冲区,就是看一下
-
cin.putback() : get()拿走了,putback再将它放回去。
char ch;
cin.get(ch);
cin.putback(ch);
int number;
cin >> number;
cout << "您输入的数字是:" << number << endl;
结果:输入和输出一样
cout
- cout.flush() : 手动刷新缓冲区
- cout.put() : 向缓冲区输入一个字符
- cout.write() :
格式化输出
#include<iomanip>
1.格式化输出(通过成员)
int number;
cin >> number;
cout.unsetf(ios::dec);//卸载当前的10进制输出
cout.setf(ios::hex);//设置当前为16进制输出
cout.setf(ios::showbase);//16进制前面显示0x 8进制前面显示0
cout.width(6); //设置6位宽
cout.fill('*'); //以~来填充 空
cout.setf(ios::left);//左对齐
cout << number << endl;
2.格式化输出(通过控制符,需要包含头文件iomanip)
cout << hex //16进制输出
<< setiosflags(ios::showbase)//16进制前面显示0x 8进制前面显示0
<< setw(6)//设置6位宽
<< setiosflags(ios::left)//左对齐
<< setfill('*')//以*来填充 空
<< number << endl;//
3. cout << fixed << setprecision(0) << 数<< endl;
//cout<<fixed——指一般方式(浮点)输出,不采用科学计数法输出
//setprecision(n)——设置输出浮点数的精度,配合fixed设定,指的是小数位数,设置setprecision(0)即指输出不带小数位的int值
文件IO ifstream ofstream fstream
文件打开类型
| Mode | 含义 |
|---|---|
| ios::in | 读文件的方式打开 |
| ios::out | 写文件的方式打开 |
| ios::app | 追加的方式打开 |
| ios::trunc | 覆盖原来的,从头开始 |
| ios::binary | 以二进制的方式,序列化 |
| ios::ate | 指针置于文件尾部,用时候 参考 |
不同类型之间可以用 | 连接
ifstream:读
- 以空格读取
ifstream fin("./xx.txt");
if(!fin)
{
cout << "error" << endl;
}
int data[100] ={0};
int i=0;
while(!fin.eof())
{
fin >> data[i];
i++;
}
fin.close();
- 以行读取
ifstream fin("./xx.txt");
if(!fin)
cout << "error" << endl;
string name;
while(!fin.eof())
{
getline(fin,name);
cout << name << endl;
}
fin.close();
- 常用的函数:
fin.get()
ofstream:写
- 常用的函数:
fout.put()
fout.write()
fout.flush()
fstream:读写
- 常用的函数:
在这里插入代码片
二进制方式读写文件
首先明白的概念:文本模式、二进制模式
- 在linux平台下进行文件读写时,文本模式和二进制模式没有区别
- 在windows下,
(文本模式):
写文件将 换行\n 转化成 回车换行\r\n
读文件将 将回车换行\r\n 转化成 换行\n
(二进制模式)
不进行转化
- 将对象以二进制读取,保存-> 叫做对象序列化
class Person
{
public:
Person(int age, int name):m_age(age),m_name(name) { }
Person() { }
void show()
{
cout << m_age << " "<< m_name << endl;
}
int m_age;
int m_name;
};
Person p1(20, 10);
Person p2;
const char* path2 = "C:\\Users\\VULCAN\\Desktop\\b.txt";
ofstream osm(path2, ios::out|ios::binary);//out写,binary二进制方式
osm.write((char*)&p1, sizeof(Person));
osm.close();
ifstream ism(path2, ios::in | ios::binary);//读
ism.read((char*)&p2, sizeof(Person));
p2.show();
ism.close();
本文详细介绍了C++中的标准输入输出流(cin、cout)的使用方法,包括字符读取、格式化输出等,以及文件输入输出流(ifstream、ofstream、fstream)的基本操作和模式,特别关注了二进制文件的读写。
156

被折叠的 条评论
为什么被折叠?



