在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
(一)标准I/O对系统指定的标准设备的输入和输出。即从键盘输入数据,输出到显示器屏幕。这种输入输出称为标准的输入输出。
(二)文件I/O以外存磁盘文件为对象进行输入和输出,即从磁盘文件输入数据,数据输出到磁盘文件。以外存文件为对象的输入输出称为文件的输入输出
(三)串I/O对内存中指定的空间进行输入和输出。通常指定一个字符数组作为存储空间(实际上可以利用该空间存储任何信息)。这种输入和输出称为字符串输入输出
二:I/O类库中常用流类(一)类名及作用
(二)类关系ios是抽象基类,由它派生出istream类和ostream类,两个类名中第1个字母i和o分别代表输入(input)和输出(output)。
istream类支持输入操作,
ostream类支持输出操作,
iostream类支持输入输出操作。
iostream类是istream类和ostream类通过多重继承而派生的类。
C++对文件的输入输出需要用ifstrcam和ofstream类,两个类名中第1个字母i和o分别代表输入和输出,第2个字母f代表文件 (file)。 三:标准I/O流:cin,cout,cerr,clog
(一)标准输入流1:常见函数cin.get() //获取字符,指定个数字符(字符串),按照字符截取字符串
cin.getline() //获取一行字符串(允许空格)
cin.ignore()
cin.peek()
cin.putback()
cin.get()的使用1:cin.get() 读取一个字符char a; a = cin.get(); cout << a << endl; 或者char a; cin.get(a); cout << a << endl; 2:cin.get()读取指定个数字符(字符串)char a[5]; cin.get(a,5); //虽然我们获取5个,但是当我们输入5个及以上,内部函数只会获取4个字符,最后加上'\n' cout << a << endl; 3:cin.get()获取字符串(根据指定字符截止)char a[10]; cin.get(a,10,'a'); //遇到字符'a'则结束 cout << a << endl; 4:cin.get()更多用法可以查看源码定义和声明cin.getline()的使用 :同get()方法的后面两种一致1.方法一:获取指定个数字符char a[10]; cin.getline(a,7); cout << a << endl; 2.方法二:按照指定字符截取获取字符串char a[10]; cin.getline(a,7,'z'); cout << a << endl; 注意:getline两种用法区别《重点》_Myt& __CLR_OR_THIS_CALL getline(_Elem *_Str, streamsize _Count) { // get up to _Count characters into NTCS, discard newline cin.ignore()的使用1.缓冲区引入《重点》键盘输入和应用程序处理之间存在输入缓冲区
应用程序和设备磁盘文件之间存在输出缓冲区
例如图中输入字符串先是放入缓冲区中,只取走其中部分字符串。 char a[10]; cin.getline(a,7,'z'); cout << a << endl; cin.getline(a, 7, 'f'); cout << a << endl; system("pause"); 注意:若是想取走缓冲区剩余字符。可以使用cin.getline()取走所有剩余数据就可以了
2.cin.ignore()可以用于清除(忽略)缓冲区剩余内容指定个数char a[10]; cin.getline(a,7,'z'); cout << a << endl; cin.ignore(); //默认是忽略一个字符 cin.getline(a, 7, 'f'); cout << a << endl; cin.ignore(5); //忽略5个字符 cin.peek()的使用:读缓冲区中下一个字符,但是不将其取走
cin.putback()的使用:在缓冲区前面插入一个字符
更多方法查看手册或者看源码即可(二)标准输出流1.输出流控制符2.用于控制输出格式的流成员函数3.设置格式状态的格式标志4.案例使用一 (double浮点型)double a = 123.45678910; cout << a << endl; //默认6位有效数 123.456 cout << setprecision(9) <<a<< endl; //9位有效数 123.456789 /***********浮点数******************/ cout << setprecision(7); //浮点数以定点形式输出,精度变为小数点保留位数 cout << setiosflags(ios::fixed) << a << endl; //123.4567891 cout << setiosflags(ios::fixed) << setprecision(8) << a << endl; //123.45678910 cout << setprecision(4); cout << setiosflags(ios::scientific) << a; //设置浮点数以科学计数法形式显示 0x1.edd4p+6 5.案例使用二(int整型):注意setw域宽只对后面一个输出有效int a = 123456; cout << a << endl; cout << hex <<a<< endl; //16进制显示 cout << setiosflags(ios::uppercase) << a << endl; //16进制字母大写 cout << setw(10) << endl; //设置域宽 右对齐 cout << setfill('*') << a << endl; //右对齐,域宽10,空白填充* cout << setw(10) << setfill('^'); //设置域宽--->注意setw域宽只对后面一个输出有效 cout << setiosflags(ios::left) << a << endl; //左对齐 //想显示+号,需要在10进制下 cout << dec<<setw(10)<<setfill('%'); cout << setiosflags(ios::showpos) << a << endl; //设置显示+号 6.注意点1.成员函数width-->cout.width() setw--->cout<<setw() 只对其后的第一个输出项有效 2.格式状态分5组,每组只有一个有效(互斥)例如:dec,oct,hex设置多个只有后面那个有效 3.可以使用'|'一次设置多个状态 四:文件I/Oifstream类,它是从istream类派生的,用来支持从磁盘文件的输入。
ofstream类,它是从ostream类派生的,用来支持向磁盘文件的输出。
fstream类,它是从iostream类派生的,用来支持对磁盘文件的输入输出。
(一)状态模式文件输入输出设置方式注意:有些属性是互斥的,使用时注意
例如:app和trunc--->app是在文件末尾加入,而trunc是清空文件查询写入。功能互斥,用于打开文件会打开失败。
注意:打开文件时,所有打开方式,基本都是:若是文件不存在则自动创建
文件属性
(二)案例使用:写入文件并读取数据#include <iostream> #include <fstream> void main() { char info[100]; cin.getline(info, 100); //写入数据 ofstream ofile; ofile.open("D:\\1\\io2.txt", ios::app|ios::trunc); //以追加和创建方式打开 默认是普通文件 if (!ofile) { cout << "ofile open failure" << endl; } else { ofile << info; //写入普通数据 ofile.close(); //关闭文件 } memset(info, 0, 100); //初始化空 //读取数据 ifstream ifile; ifile.open("D:\\1\\io2.txt", ios::in); //读取文件 0是默认普通文件,可以像上面一样不写 if (!ifile.is_open()) { cout << "open failure" << endl; } else { ifile.getline(info, 100); ifile.close(); cout << info << endl; } system("pause"); } (三)案例使用:二进制文件操作read,write对二进制文件的读写主要使用istream中的write和read方法来实现 istream& read(char* buf,int len) ostream& write(char* buf,int len) typedef struct { char name[10]; bool sex; int age; }Stu; void main() { //结构体操作 Stu s,s2; strcpy(s.name, "fagfwa"); s.sex = true; s.age = 18; //写入二进制文件 ofstream ofile; ofile.open("D:\\1\\stu.bin", ios::binary|ios::out); if (!ofile.is_open()) return ; ofile.write((char*)&s,sizeof(s)); ofile.close(); //读取二进制文件 ifstream ifile; ifile.open("D:\\1\\stu.bin", ios::binary | ios::in); if (!ifile) return; ifile.read((char*)&s2, sizeof(s2)); cout << s2.name << endl << s2.age << endl << s2.sex << endl; ifile.close(); system("pause"); }
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论