前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布

IO流

作者头像
DeROy
发布2020-05-12 10:20:24
6180
发布2020-05-12 10:20:24
举报
文章被收录于专栏:编程学习基地编程学习基地

目录

IO流使用cout进行输出cout格式化调整字节宽度以及填充字符setf()相关字符串流文件流

IO流

C++兼容C,所以C中的输入输出函数依然可以在C++中使用,但是直接把C的那套输入输出搬到C++中肯定无法满足C++的需求。

使用cout进行输出

cout格式化

格式设置完成之后将以对应格式打印,直到格式状态设置为其他的选项为止

代码语言:javascript
复制
cout<<showbase;          //设置显示进制前缀
cout << dec << "dec:" << 15 << endl;
cout << oct << "oct:" << 15 << endl;
cout << hex <<"hex:"<< 15 << endl;

另外一种对象设置的方法,了解即可,没上面的方便

代码语言:javascript
复制
cout.setf(ios::showbase);     //设置显示进制前缀
cout << "dec" << 15 << endl;   //默认10进制
cout.unsetf(ios::dec);        //取消10进制  一定要取消
cout.setf(ios::hex);         //设置16进制
cout << "hex:" << 15 << endl;
调整字节宽度以及填充字符

头文件:

代码语言:javascript
复制
#include <iomanip>
代码语言:javascript
复制
const char* str = "sirius";
cout.width(10);    //设置宽度
cout << str << endl;
cout.width(10);    //设置宽度
cout.fill('*');    //设置填充字符
cout << str << endl;
cout.precision(2);  //设置精度
cout << 3.1415 << endl;
输出结果:
    sirius
****sirius
3.1
setf()相关

常量

含义

ios_base::boolalpha

输入输出bool值,可以为ture或false

ios_base::showbase

显示前缀0x01

ios_base::showpoint

显示末尾的小数点

ios_base::showpos

在正数前加+

参数

含义

ios_base::fixed

(默认)使用定点计数法

ios_base::scientific

使用科学计数法

ios_base::left

使用左对齐

ios_base::right

(默认)使用右对齐

ios_base::internal

符号或者基数前缀左对齐,值右对齐

字符串流

头文件

代码语言:javascript
复制
#include <sstream>
代码语言:javascript
复制
#include <iostream>
#include <sstream>
using namespace std;
int main() {
  //类型转换
  string res = "100";
  int num = 0;
  stringstream ss;
  ss << res;
  ss >> num;
  cout << num << endl;

  //分割字符串+类型转换
  string ip = "192.168.0.1";
  stringstream ss1(ip);
  int a1, a2, a3, a4;
  char ch;
  ss1 >> a1 >> ch >> a2 >> ch >> a3 >> ch >> a4;
  cout << a1 << " " << a2 << " " << a3 << " " << a4 << " " << ch << endl;

  //拼接字符串
  stringstream ss2;
  num = 3;
  char str[] = "14159";
  ss2 << num << ch << str;
  cout << ss2.str() << endl;
  return 0;
}
代码语言:javascript
复制
输出:
100
192 168 0 1 .
3.14159

文件流

头文件:

代码语言:javascript
复制
#include<fstream>

文件流常用函

描述

open

打开文件

is_open

文件是否被打开

close

关闭文件

getline

读取一行

read

输入(读)到对象

write

输出(写)到文件

flush

将缓冲区的数据写出到文件,再清空它

tellg

输入(读)文件指针位置

tellp

输出(写)文件指针位置

seekg

设置输入(读)文件指针位置

seekp

设置输出(写)文件指针位置

eof

是否到了流尾部

C++ 和 C的文件打开模式

C++模式

C模式

描述

ios_base::in

"r"

打开以读取

ios_base::out

"w"

等价于ios_base::out | ios_base::trunc

ios_base::out | ios_base::trunc

"w"

打开以写入,如果已存在,则截断文件

ios_base::out | ios_base::app

"a"

打开以写入,只追加

ios_base::out | ios_base::in

"r+"

打开以读写,在文件允许的位置写入

ios_base::out | ios_base::in | ios_base::trunc

"w+"

打开以读写,如果已存在,则截断文件

ios_base::binary

"b"

以二进制的形式打开

截断文件:在文件写入之前擦除掉所有数据

open第三个参数

模式

描述

_SH_DENYRW

拒绝读写

_SH_DENYWR

拒绝写

_SH_DENYRD

拒绝读

_SH_DENYNO

可读写

_SH_SECURE

安全模式,向前兼容

示例程序:

代码语言:javascript
复制
#include<iostream>
#include<fstream>
using namespace std;
struct Student
{
  char name[20];
  int num;
  int age;
  char gender;
};
int main()
{
  fstream inFile;
  ofstream outFile;
  Student stu[3] = { {"张三",1001,18,'M'},{ "李四",1002,18,'M' } ,{ "王二",1003,18,'M' } },temp;

  outFile.open("test.txt", ios_base::out);   
  inFile.open("test.txt", ios_base::in);
  if (!outFile) {
    cerr << "open error!" << endl;
    abort();
  }
  if (!inFile) {
    cerr << "write error!" << endl;
    abort();
  }

  for (int i = 0; i < 3; i++)
  {
    outFile.write((char*)&stu[i], sizeof(Student));
    //outFile << "\n";  //插入换行符
  }
  outFile.close();
  for (int i = 0; i < 3; i++)
  {
    inFile.read((char*)&temp, sizeof(Student));
    cout << temp.age << temp.gender << temp.name << temp.num << endl;
  }
  inFile.close();
  cin.get();
  return 0;
}

End

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-05-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 编程学习基地 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • IO流
    • 使用cout进行输出
      • cout格式化
      • 调整字节宽度以及填充字符
      • setf()相关
      • 字符串流
    • 文件流
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档