流: 若干字节数据从一端到另一端我们叫做流
例如:操作文件,从程序到文件,数据的流动的操作称为流操作
流类体系
专门处理输入输出流、字符流、文件流,包含有:
流对象流运算符 >> <<输入/出流对象 + 流运算符 >> <<—处理输入输出的数据
字符流对象 + 流运算符 >> << —处理字符流
文件的对象 + 流运算符 >> << —读写文件处处的近义词
istream 类—cin 输入
ostream类—cout 输出
tip:输出流除了cout外,还有一些别的对象(效果和cout一样)
cerr —标准出错clog —日志文件输出#include <iostream>using namespace std;void testostream() //output {//freopen()cout << "标准输出" << endl;//cin/cout都可以重定向cerr << "标准错误输出" << endl;//不能重定向 当觉得程序可能出错时用cerr输出,标识作用clog << "日志文件输出" << endl; //可以重定向为文件}int main(){ 非洲气候类型分布图 testostream();}/*输出*/ /*标准输出 标准错误输出 日志文件输出*/
把程序的输入、输出重定向为文件
重定向是文件中的数据的格式要与程序读取的格式一致
输入重定向
#include<cstdio>#include<iostream>int main(){ freopen("1.txt","r",stdin);//参数:文件名 读写方式 流 int a,b; scanf("%d%d",&a,&b); //把基本输入定向为文件,程序所有的输入由文件完成 std::cout<<a+b; }/*输出*/ /* 在黑窗口输出3 */
输出重定向
#include<cstdio>#include<iostream>int main(){ freopen("1.txt","r",stdin);//参数:文件名 读写方式 流 int a,b; scanf("%d%d",&a,&b); //把基本输入定向为文件,程序所有的输入由文件完成 std::cout<<a+b; freopen("2.text","w",stdout); printf("%d",a+b); }/*输出*/ /* 在2.txt中输出3 */
单个字符和字符串的输出处理
//调用成员函数的方式传常量、变量都可以void testostream() {//单个字符的输出 cout.put('a'); //传常量 通过io流对象调用成员函数的方式cout << 'a' << endl; //正常的输出方式 char c = 'c';cout.put(c); //传变量cout << c << endl;//多个字符/字符串的输出cout.write("iloveyou",4); /*直接写入输出 后面的参数:指定长度,超过长度的部分不做输 出截取输出没有'//调用成员函数的方式传常量、变量都可以void testostream() {//单个字符的输出cout.put('a'); //传常量 通过io流对象调用成员函数的方式cout << 'a' << endl; //正常的输出方式char c = 'c';cout.put(c); //传变量cout << c << endl;//多个字符/字符串的输出cout.write("iloveyou",4); /*直接写入输出 后面的参数:指定长度,超过长度的部分不做输 出截取输出没有'\0',只截取了前面4位*/}int mai经典搞笑短信大全n(){testostream();}/*输出*//*aaccilov*/',只截取了前面4位*/}int main(){ test智子疑邻pptostream();}/*输出*/ /*aa cc ilov*/
单个字符和字符串的输入处理
void testostream(){//单个字符的讲道德有品行发言稿输入/* char c;c=cin.get();cout.put(c); 用中间变量接收返回值,再做输出*/cout.put(cin.get()); //要处理回车cout << endl; //多个字符/字符串的输入cout << "字符串的处理"<<endl;while (cin.get() != '\n');//while(getchar()!='\n');char str[20] = ""; //准备一个字符串 注意不是返回值不能一步到位cin.getline(str, 20);//输入函数cout.write(str, 20); //输出函数 相对于流操作更安全,可以指定长度,同样需要清空缓冲区处理}int main() { testostream();}/*输出*/ /*a a 字符串的处理 hello hello*/
注意不能用来处理string
string text; cin.getline(text,20); //报错,不能处理string,只能处理char*
格式控制字符
包含头文件 <iomanip>
常用的格式控制,一种是调用成员函数方式,一种流控制字符去做
设置有效位数: tprecision(n)设置精度: fixed 结合 tprecision 使用tip:流控制字符—c++用来控制格式的操作
设置格式
int main(){ double pi = 34.12343;cout << "设置有效位数是:" << tprecision(4) << pi << endl; //从整数位开始算cout << "有效小数位:" << fixed << tprecision(4) << pi << endl;//从小数位开始算 //所有的流控制符都会对应一个成员函数的方式cout.precision(4); cout << "有效小数位:" << pi;/*设置完流格式不一定要立即输出, 可以缓慢输出(在下一行输出)*/ double pi = 34.12369;cout << "设置有效位数是:" << tprecision(4) << pi << endl;cout << "有效小数位:" << fixed << tprecision(4) << pi << endl;cout.precision(4); //所有的流控制符都会对应一个成员函数的方式cout << "有效小数位:" << pi;}/*输出 四舍五入 */ /* 设置有效位数是:34.12 有效小数位:34.1234 有效小数位:34.1234 设置有效位数是:34.12 有效小数位:34.1237 有效小数位:34.1237 */
进制输出
int main(){cout << hex << 32 << endl; //16进制cout << oct << 15 << endl; //8进制输出//流控制字符的方式cout << tba(2) << 7 << endl; //2进制无效,不能是任意进制,任意进制的默认10进制输出}/*输出*/ /*20 17 7*/
对齐方式和数据的宽度问题 制表符 ‘\t’
限制每个数据的位数不足补空格
1. 8位制表,不足8位 补空格
2. 超过8位,按照16位制表
//默认右对齐int main(){ cout << tw(8) << "123" << tw(8) << "12344" << tw(8) << "3444" << endl; cout << tiosflags(ios::left);//ios::right右对齐 ios::left左对齐 数据不够用空格占位 cout << tw(8) << "123" << tw(8) << "12344" << tw(8) << "3444" << endl; /*cout.width(8); cout<<"123"<<"123"<<"666"; 调用成员函数的方式,只能管一个制表 }/*输出*/ 123 12344 3444 //默认是右对齐方式123 12344 3444 123 123666
到此这篇关于c++学习之io流(输入输出流)详解的文章就介绍到这了,更多相关c++ io流内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!
本文发布于:2023-04-04 03:00:41,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/ff242e89eb6ad3a6a151583cf837b68d.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:C++学习之IO流(输入输出流)详解.doc
本文 PDF 下载地址:C++学习之IO流(输入输出流)详解.pdf
留言与评论(共有 0 条评论) |