cout 是 console output 缩写
程序 和键盘 之间有一个输入缓冲区
程序 和 显示器 之间有一个输出缓冲区
#include<iostream>
#include<windows.h>
#include<iomanip>
using namespace std;
#if 0
cout << "dd"; //全局流对象,默认和显示器关联
cin;
cerr; //标准错误 没有缓冲区 输出数据到显示器
clog; //标准日志 有缓冲区 输入数据到显示器
#endif//标准输入流 cin.get()从缓冲区取数据,若是没有则阻塞
void test01() {//char ch;//while ((ch = cin.get())!=EOF) { //EOF结束符:Ctrl+Z // cout << ch << endl;//}//cin.getchar ch2;//cin.get(ch2); //读取一个字符char buf[256] = { 0 };//cin.get(buf, 256); //从缓冲区读一个字符串cin.getline(buf, 256); //获得一行数据不会读取换行符,\n之前的数据cout << buf;
}//cin.ignore() 忽略当前字符
void test02() {char ch;cin.get(ch); 从缓冲区读数据, 为空阻塞cout << ch << endl;cin.ignore(); //忽略当前字符,从缓冲区取走cin.ignore(2); //忽略几个字符cin.ignore(10, '\n'); //若前十个都没有字符都没有\n,则忽略十个,只有在10个之前发现\n,则都不忽略cin.get(ch);cout << ch << endl;
}//cin.peek 查看缓冲区第一个字符
void test03() {cout << "please input array or string:" << endl;char ch;ch=cin.peek(); //偷窥一下缓冲区,返回第一个字符if(ch >= '0' && ch <= '9'){int number;cin >> number;cout << "input number" << number << endl;}else {char buf[256] = { 0 };cin >> buf;cout << "the string is:" << buf << endl;}
}//cin.putback将数据拿回到缓冲区 cin.get从缓冲区拿走数据
void test04() {cout << "please input string or number:" << endl;char ch;cin.get(ch); //从缓冲区取走一个字符if (ch >= '0' && ch <= '9') {//ch放回到缓冲区cin.putback(ch);int number;cin >> number;cout << "input the number" << number << endl;}else {cin.putback(ch);char buf[256] = { 0 };cin >> buf; //将buf存入输入流中cout << "input the string"<<buf << endl;}
}//标准输出流
//endl 有两个作用:1.换行 2.刷新缓存区
//不加endl大多数情况下,也能正常输出,
//是因为在系统较为空闲时候,会查看缓存区的内容,如果发现新的内容,便进行输出。
void test05() {cout << "hello world"<<endl;cout.flush();cout.put('h').put('e').put('l') << endl;cout.write("zhaosi",strlen("zhaosi"));
}//格式化输出
void test06() {int number = 10;cout << "十进制" << endl;cout << number << endl;//1、成员方法的方式cout.unsetf(ios::dec); //卸载当前默认的10进制输出方式cout.setf(ios::oct); //八进制输出cout.setf(ios::showbase);cout << "八进制" << endl;cout << number << endl;cout.unsetf(ios::oct);cout.setf(ios::hex);cout << "十六进制" << endl;cout << number << endl;cout << "输出控制宽度" << endl;cout.width(10);cout.fill('*');cout.setf(ios::left); //左右对齐cout << number << endl;//2、通过控制符int number2 = 10;cout << hex << setiosflags(ios::showbase)<< setw(10) //宽度<< setfill('~')<<setiosflags(ios::right)<< number2 << endl;
}
int main(){test06();return 0;
}
#include<iostream>
using namespace std;
#include<fstream> //文件读写
//文本文件读写
void test01() {//ifstream ism;//ism.open("source.txt", ios::in);ifstream ism("source.txt",ios::in); //只读方式打开文件,文件流(管道)//ofstream osm("target.txt", ios::out); //清除后复制ofstream osm("target.txt", ios::out | ios::app); //以追加的方式复制if (!ism) { //!肯定重载cout << "open file fail" << endl;return;}//读文件char ch;while (ism.get(ch)) {cout << ch;osm.put(ch); //往流里增加数据}//关闭文件ism.close();osm.close();
}//二进制文件操作 对象序列化
class Person {
public:Person(){}Person(int age,int id):age(age),id(id){}void show() {cout << "Age:" << age << "id:" << id << endl;}
public:int age;int id;
};void test02() {//文本模式读的是文本文件吗? 都是二进制方式存储windows:\r\n-->\n linux:\n-->\n//二进制模式读的是二进制模式吗? 是Person p1(10, 20), p2(30, 40); //p1和p2是以二进制的方式存在程序中//把p1 和 p2写进文件中ofstream osm("target对象.txt",ios::out | ios::binary); osm.write((char*)&p1, sizeof(Person)); //二进制方式写文件osm.write((char*)&p2, sizeof(Person));osm.close();ifstream ism("target对象.txt", ios::in | ios::binary);Person p3,p4;ism.read((char*)&p3, sizeof(Person));ism.read((char*)&p4, sizeof(Person));p3.show();p4.show();ism.close();
}int main()
{test02();return 0;
}