文件IO和标准输入输出
- 键盘输入输出叫标准输入输出
- 文件的输入输出叫文件I/O
- 一般过程是键盘输入到输入缓冲区,到程序到输出缓冲区,输出缓冲区到显示器
缓冲区
- 输入缓冲区,本质上就是一块内存,键盘输入到这块内存
- 输出缓冲区,程序输出到缓冲区,缓冲区输出到显示器显示,endl会输出换行并且立即刷新缓冲区,代码cout<<“hello world”;在Linux下不会输出,必须加endl才会输出
- <iostream>中cerr没有缓冲区直接输出到显示器,clog有缓冲区,通过缓冲区输出到显示器
标准输入流
- cin.get(),回车结束,可以读字符也可以读字符串,读字符串时包括\n
- cin.getline(),读一行,不读入换行符’\n’,就是所谓的读一行数据
- cin.ignore,忽略该字符,即从缓冲区拿走字符或者字符串
- cin.peek,偷窥缓冲区,获取里面数据但不拿走数据
- cin.putback(),放回缓冲区
代码示例
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
void test01()
{
//char ch;
//while ((ch=cin.get())!=EOF)//读入字符包括\n
//{
// cout << ch << endl;
//}
//cin.get
//char ch2;
//cin.get(ch2);//读一个字符
char buf[256] = { 0 };
//cin.get(buf, 256);//从缓冲区读一个字符串,包括\n
//cin.getline(buf, 256);//读一行数据,不会读入\n
cout << buf << endl;
}
void test02()
{
char ch;
cin.get(ch);//从缓冲区要数据,没有就阻塞
cout << ch << endl;
cin.ignore();//忽略该字符,从缓冲区拿走
cin.ignore(10,'\n');//忽略十个字符,直至遇到\n
cin.get(ch);
cout << ch << endl;
}
//cin.peek应用
void test03()
{
cout << "请输入数字或者字符串" << endl;
char ch;
ch = cin.peek();
if (ch >= '0' && ch <= '9')
{
int number;
cin >> number;
cout << "您输入的是数字" << number << endl;
}
else
{
char buf[256] = { 0 };
cin.get(buf, 256);
cout << "您输入的是字符串" << buf << endl;
}
}
//cin.putback放回缓冲区
void test04()
{
cout << "请输入字符串或者数字" << endl;
char ch;
cin.get(ch);
if (ch >= '0' && ch <= '9')
{
cin.putback(ch);
int number;
cin >> number;
cout << "您输入的数字是" << number << endl;
}
else
{
cin.putback(ch);
char buf[256] = { 0 };
cin >> buf;
cout << buf << endl;
}
}
int main(void)
{
//test01();
//test02();
//test03();
test04();
return 0;
}
标准输出流
- cout.flush()刷新缓冲区
- cout.put()输出一个字符
- cout.write(“写一个字符串”,size),写一个字符串
- cout.unsetf和cout.setf格式化输出
代码示例
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<iomanip>
using namespace std;
void test01()
{
cout << "hello world" << endl;
cout.put('h').put('e').put('l') << endl;
//cout.write("写一个字符串", strlen("写一个字符串"));
}
//格式化输出
void test02()
{
//通过格式化成员方法
//十进制变成八进制
int number = 100;
cout.unsetf(ios::dec);//卸载十进制输出
cout << number << endl;
cout.setf(ios::oct);//设置八进制输出
//cout.setf(ios::showbase);//设置显示输出格式
cout.width(10);//留十个字符位置
cout.fill('*');//多余位置用*填充,不够会自动补充
cout.setf(ios::left);//默认是右对齐,这里设置左对齐
cout << number << endl;
//通过控制符
int number2 = 100;
cout << oct
//<< setiosflags(ios::showbase)
<< setw(10)
<< setfill('*')
<< setiosflags(ios::left)
<< number2
<< endl;
}
int main(void)
{
//test01();
test02();
system("pause");
return 0;
}