程序的输入指的是从输入文件将数据传送给程序,程序的输出指的是将数据传送给输出文件
C++编译系统提供的输入输出
- 标准I/O:键盘输入,输出到显示器屏幕
- 文件I/O:磁盘文件输入,输出到磁盘文件
- 串I/O:字符数组作为存储空间(实际上可以利用该控件存储任何信息)
标准输入流
char c = cin.get(); //一次只能输入一个字符
cout << "c = " << c << endl;
char buf[1024];
cin.get(buf, 1024); //可以读取字符串 读取字符串时,不会把换行符拿走
char c1 = cin.get();
cout << "buf = " << buf << endl;
char buf1[1024];
cin.getline(buf1, 1024); //可以读取字符串 读取字符串时,会把换行符拿走
cout << "buf1 = " << buf1 << endl;
cin.ignore(); //忽略一个字符
cin.ignore(2); //忽略两个字符
char c3 = cin.get();
cout << "c3 = " << c3 << endl;
char c4 = cin.peek(); //输入as, 偷看一眼a,然后再放回缓冲区,缓冲区中还是as
cout << "c4 = " << c4 << endl;
c4 = cin.get();
cout << "c4 = " << c4 << endl;
char c5 = cin.get();
cin.putback(c5); //拿走后又放回
char buf2[1024];
cin.getline(buf2, 1024);
cout << "buf2 = " << buf2 << endl;
标准输入流案例
int num;
cout << "请输入一个1到10的数字:" << endl;
while (true)
{
cin >> num;
if (num > 0 && num <= 10)
{
cout << "输入的数字为:" << num << endl;
break;
}
cin.clear(); //清空标志位 有可能输入一个字符,那么就需要修改标志位,否则会出错
//cin.sync(); //清空缓冲区,但这个在VS2017上不适用
cin.ignore();
//cout << "请重新输入" << endl;
cout << "标志位:" << cin.fail() << endl;
}
标准输出流
//cout.flush(); 刷新缓冲区Linux下有效
void test01()
{
cout.put('a'); //向缓冲区写字符
cout.put('b').put('c');
char buf[1024] = "helloworld";
cout.write(buf, strlen(buf)); //从buf中写strlen(buf)个字节到当前输出流中
}
格式化输出
- 使用控制符的方法
int number = 99;
cout << setw(20)
<< setfill('*')
<< setiosflags(ios::showbase)
<< setiosflags(ios::left)
<< hex
<< number
<< endl;
- 使用流对象的有关成员函数
cout.width(20);
cout.fill('*');
cout.setf(ios::left);
cout.unsetf(ios::dec);
cout.setf(ios::hex);
cout.setf(ios::showcase);
cout.unsetf(ios::hex);
cout.setf(ios::oct);
文件操作
#include <fstream>
写文件
void test01()
{
//以输出的方式打开文件
ofstream ofs("./test.txt", ios::out | ios::trunc);
if (!ofs.is_open())
{
cout << "打开失败" << endl;
}
ofs << "姓名:abc" << endl;
ofs.close()
}
读文件
void test02()
{
ifstream ifs;
ifs.open("./test.txt", ios::in);
if (!ifs.is_open())
{
cout << "打开失败" << endl;
}
//第一种读取方式:按行读取
char buf[1024];
while (ifs >> buf)
{
cout << buf << endl;
}
//第二种读取方式
char buf1[1024];
while (!ifs.eof()) //eof读到文件尾
{
ifs.getline(buf1, sizeof(buf1));
cout << buf1 << endl;
}
//第三种读取方式:按单个字符读取
char c;
while (c = ifs.get() != EOF) //EOF文件尾
{
cout << c;
}
}