C++的输入和输出流详解
输入和输出流从键盘输入数据输出到显示器屏幕。这种输入输出称为标准的输入输出简称标准I/O。从磁盘文件输入数据数据输出到磁盘文件简称文件I/O。对内存中指定的空间进行输入输出通常指定一个字符数组作为存储空间存储任何信息称为字符串输入输出简称为串I/O缓冲区无论是输入还是输出都是存在缓存区的。标准输入流常用的成员函数1,cin.get()获取一个字符1charc cin.get();使用cin.get()可以家当缓冲区中的换行符拿走。注意返回值是什么类型的拿走的数据再输出的时候就是什么类型。2,cin.get(两个参数)获取字符串参数是字符串数组名和个数使用cin.get(两个参数)那字符串的时候换行符\0会遗留在缓冲区中。123charbuf[100] {0};cin.get(buf, 100);cout buf endl;只满足字符数组且输出的字符个数总比第二个参数少1.(原因字符数组最后一个字符是不可见字符’\0’)3cin.getline()获取字符串接收一个字符串并输出和cin.get(两个参数)相似不会将换行符加入字符串但是也不会留在缓冲区中而是直接扔掉。123charbuf[100] {0};cin.getline(buf, 100);cout buf endl;可以有第三个参数就是终止位置一个字符不包括这个字符4,cin.ignore()忽略一个字符括号中可以填入参数参数就是忽略字符的个数。默认是一个。123cin.ignore();charc cin.get();//abcout c endl;//b将a忽略了5cin.peak()偷窥1234charc cin.peek();cout c endl;//acharm cin.get();cout m endl;//a缓冲区中输入了一个a然后cin.peek()只是看了一眼并没有拿走所以调用cin.get()的时候可以直接从缓冲区中拿。6,cin.putback()放回(原来的位置)12345charc cin.get();cin.putback(c);//将从缓冲区拿走的字符返回原位置charbuf[100] { 0 };cin.getline(buf, 100);//接收的是缓冲区中的字符串输出的对象是buf这个字符数组。cout buf endl;输入hello输出仍是hello。小案例案例一判断输入的内容是字符串还是数字不存在混合的情况1234567891011121314151617181920intmain(){cout 请输入一个数字或者一个字符串 endl;charc cin.peek();if(c 0 c 9){cout 数字 endl;intnum;cin num;cout num endl;}else{cout 字符串 endl;charbuf[100] { 0 };cin buf;cout buf endl;}return0;}案例二用户输入0-10之间的数字如果输入有误重新输入。1234567891011121314151617181920intmain(){cout 请输入一个0-10之间的数字 endl;while(true){intnum;cin num;if(num 0 num 10){cout 输入正确输入的值为 num endl;break;}else{cout 输入有误请重新输入 endl;}}return0;}如果输入的是一个数字那么一切正常。但是如果输入字符那么就是陷入死循环。这个时候就是缓存区出现了问题。所以如果没有输入正确那么可以进行清空缓存区和重置标志位。这个标志位如果是0表示缓冲区正常1就是不正常12345cin.clear();//清空缓冲区cin.sync();//重置标志位cin.ignore();//帮助清空2013版本以上需要加。//上面三句话连着使用。cin.fail();//标志位标准输出流1cout.put(),向缓冲区写一个字符括号里面是啥就打印啥。可以拼接使用cout.put(‘h’).cout.put(‘a’);//打印结果就是ha2cout.write(两个参数),两个参数是char* 和 对应字符串的长度不能超过最大长度。从字符串中拿走规定长度的内容输出。12chararr[] hello;cout.write(arr,strlen(arr));//hello但是如果要全部打印的话直接使用coutarrendl;也是可以的。优点应该是可以打印规定长度的字符串。格式化输出:(1) 通过流成员函数 格式化输出1234567891011121314intmain(){intnum 99;cout.width(5);//指定宽度为20向前面加空格结果 99cout.fill(*);//空格处都填充上*结果***99填充内容会被下一此的填充内容覆盖cout.setf(ios::left);//输出的文本左对齐结果99***cout.unsetf(ios::dec);//卸载十进制cout.setf(ios::hex);//安装十六进制,结果为63***cout.setf(ios::showbase);//显示基数结果0x63*。输出对应进制的基数16进制就是0xcout.unsetf(ios::hex);//卸载十六进制cout.setf(ios::oct);//安装八进制结果为0143*。cout num endl;return0;}(2) 使用控制符 格式化输出如果使用控制符格式化输出的话需要引用头文件#includeiomanip指定宽度12345intnumber 110;cout setw(20)//指定宽度为20,然后默认将数据右对齐 number endl;//运行结果 110填充123456intnumber 110;cout setw(20) setfill(*)//填充位置在前在后无所谓 number endl;//运行结果:*****************110显示基数1234567intnumber 110;cout setw(20) number setfill(*) setiosflags(ios::showbase)//显示基数 endl;//运行结果:*****************110,和上面的没有区别因为十进制是没有基数的。设置左对齐123456789intnumber 110;cout setw(20) setfill(*) setiosflags(ios::showbase) setiosflags(ios::left)//设置左对齐 number endl;//运行结果:110*****************//这个时候需要注意一下如果按照刚才将number写在前面的时候是得不到想要的结果的所以应该将最终要输出的内容尽量写在右边。显示十六进制123456789intnumber 110;cout setw(20) setfill(*) setiosflags(ios::showbase) setiosflags(ios::left) hex//显示16进制 number endl;//运行结果:0x6e****************文件读写写文件需要引头文件#includefstream文件流
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2557330.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!