IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C++ IO流作业 -> 正文阅读

[C++知识库]C++ IO流作业

流:若干字节数据从一端到达另一端我们叫做流

流类体系:流对象,和流运算符>>? <<

输入输出流

ostream类:cout,cerr,clog,istream类 cin

#include<iostream>
using namespace std;
void testostream()  
{

    cout << "标准输出" << endl;    //可以重定向
    cerr << "标准出错" << endl;    //不能重定向
    clog << "标准错误输出" << endl;//这里可以重定向为文件


}

int main() 
{



    return 0;
}

很多人对重定向不太了解 ,文件重定向就是程序的输入或者输出都可以由文件来完成

从文件输入到程序中,或者程序中到文件内

#include<iostream>
#include<cstdio>
using namespace std;
void testostream()  
{

    cout << "标准输出" << endl;    //可以重定向
    cerr << "标准出错" << endl;    //不能重定向
    clog << "标准错误输出" << endl;//这里可以重定向为文件


}

int main() 
{
    int temp, temp2;
    freopen("狐狸.txt","r",stdin);//重定向输入当程序运行起来 到该文件中读取数据
    scanf("%d%d",&temp,&temp2);//将按照格式格式控制字符拿取数据
    cout << temp << temp2 << endl;//我们打印测试
    freopen("狐狸2.txt", "w", stdout);//定向为输出
    printf("%d", temp+ temp2);//这里的打印将输出到文件中
    return 0;
}

关于输出字符类的处理

一种是调用成员函数的,一种是正常调用

#include<iostream>
#include<cstdio>
using namespace std;
void testostream()  
{

    cout << "标准输出" << endl;    //可以重定向
    cerr << "标准出错" << endl;    //不能重定向
    clog << "标准错误输出" << endl;//可以重定向
    //字符类的处理
    cout.put('A');//调用成员函数
    cout << 'A' << endl;//正常的输出
    char c = 'W';
    cout.put(c);//变量常量都是可以
    cout << c << endl;
    cout.write("I love you\n",4);//截取输出,这个成员函数需要限定长度
    //输入流
    //字符输入
    c = cin.get();//get()函数返回值的是我们的输入
    cout.put(c);
    //字符串的输入
    while (cin.get() != '\n');//清空缓冲区处理
    char str[20] = "";
    cin.getline(str,20);
    cout.write(str,20);
    //注意 处理必须处理为char*  不能处理C++ string类
    //格式控制

}

int main() 
{
    testostream();
    return 0;
}

格式控制字符:包含头文件iomanip

一种调用成员函数,一种流控制字符去做

#include<iostream>
#include<cstdio>
#include<iomanip>
using namespace std;
void testiomanip() 
{
    double pi = 3.1415926535;
    cout << setprecision(4);//设置流格式输出。。这里是设置有效位数
    cout << pi << endl;
    cout << fixed << setprecision(4);//结合fixed才是设置有效小数位
    cout << pi << endl;
    cout.precision(8);//基本所有流控制符都会对应一个成员函数的方式
    cout << pi << endl;
    cout << hex << 58 << endl;//十六进制
    cout << oct << 48 << endl;//八进制
    cout << setbase(16);//设置为16进制 必须输入常用的 8 10 16 没有二进制 
    cout << 58 << endl;
    cout << setw(8);//设置间隔 //默认为右对齐的方式
    cout << setiosflags(ios::left);//设置为左对齐
    //cout << setiosflags(ios::right);//设置右对齐
    cout << setw(8) << 58 << setw(8) << 68 << endl;
 }



int main()
{
    testiomanip();
    return 0;
}

?2.字符流的处理:

? ?字符流头文件 sstream

? ?子类为istreamstream 做输入的字符流类

? ?子类为ostreamstream做输出的流类?

? ? 我们一般用streamstream 可以输入也可以输出

? ? 一般字符流对象用于??字符串分割? ? ????????字符串转换问题

#include<iostream>
#include<cstdio>
#include<iomanip>
#include<sstream>
using namespace std;
void teststringstream() 
{   //构建字符流对象
    stringstream Fox(string("I am Fox"));//构造方式
    stringstream Foxson;
    Foxson << "我爱你"; //把数据流进去
    cout << Foxson.str();//读取流里面的数据
    string data;
    Foxson >> data;//将对象流到data里面去
    cout << data << Foxson.str() << endl;//不影响原数据
   //Foxson.str("");//覆盖方式删除数据
    //字符串与数字之间的转换
    int Num = 34567;
    char input[20] = "";
    stringstream tempstr(input);//构建空的字符流对象
    tempstr << Num;//将数字流进去
    tempstr >> input;//以字符串的方式流出来
    cout << input << endl;
    //数据是按照控制字符去做转换的
    //字符串转数字更加简单
    stringstream tempstrnum("12345");
    tempstrnum >> Num;
    cout << Num << endl;
    //字符串的分割
    stringstream sdata("56,78,9121,84,48,1841,10");
    int numdata[7];
    char cdata[6];
    for (int i = 0; i < 7; i++)
    {
        if (i==6)//最后一次没有逗号
        {
            sdata >> numdata[i];//data是int它会按照整数流对象 56
        } 
        else
        {
            sdata >> numdata[i];//data是int它会按照整数流对象 56
            sdata >> cdata[i];//字符把逗号流走了
                              //会根据变量的类型去拿取数据
        }
   
    }    
    for (int i = 0; i < 7; i++)
    {
        cout << numdata[i]<<"\t";

    }
    cout << endl;
    //多次对同一个流数据转换操作,一定要对流对象进行clear操作
    tempstr.clear();
    tempstr << Num;//将数字流进去
    tempstr >> input;//以字符串的方式流出来
    cout << input << endl; //多次使用用clear,才能重新流入数据
}
int main()
{
    teststringstream();
    return 0;
}

?3.文件流

? ofstream 类? //output 输出到文件,写操作

? ifstream? 类 //读操作? ?

? fstream 类//可读可写? ?

? 头文件:fstream

?打开文件 :读写方式

ios::in//读的方式打开文件

ios::out//写的方式打开文件,具有创建功能 ,但是会覆盖文件

ios::app//追加模式

ios::atr//打开已有文件,文件指向文件末尾

ios::trunc//创建功能

ios::nocreate//不具备创建功能

ios::norlace//不替换

ios::binary//二进制方式

组合方式 |

可读可写 ios::in|ios::out

?二进制可读可写 ios::binary|ios::in|ios::out ? ? ? ? ? ?

文件打开成功 返回true,失败返回false

关闭文件 对象.close();

读写方式:

流的方式读写

会忽略空格和换行 这一点要注意

#include<iostream>
#include<cstdio>
#include<iomanip>
#include<sstream>
#include<fstream>
using namespace std;
void asciiRWFile(const char *ReadFlieName,const char *WriteFlieName)
{
    fstream read(ReadFlieName,ios::in);
    fstream writ(WriteFlieName, ios::out);
    //1.流的方式读写
    //while (1) //eof没到头 返回的应该是个假 所以取反
    //{
    //    char key;
    //    read >> key;
    //    if (read.eof())//eof到头 放回真,于是执行
    //    {
    //        break;
    //    }
    //    writ << key;//可以直接留到文件对象所指向的文件
    //}
    //2.流会忽略空格和换行 我们通过成员函数字符方式读写
    //while (1) 
    //{
    //    char key;
    //    read.get(key);
    //    if (read.eof())//eof到头 放回真,于是执行
    //    {
    //        break;
    //    }
    //    writ.put(key);//输出到指定的文件中
    //}
    //流字符串读写方式
    
    while (!read.eof())
    {
        char str[1024] = "";//每一次读都要做初始化
        read.getline(str,1024);
        writ.write(str,strlen(str));//统计一下可见长度,写出来没有换行  
        writ << endl;//流一个换行进去
    
    }

    read.close();
    writ.close();
}


int main()
{
    asciiRWFile("读的文件.txt","123.txt");
  
    return 0;
}

二进制读写:

二进制读写相对与字符读写简单太多

#include<iostream>
#include<cstdio>
#include<iomanip>
#include<sstream>
#include<fstream>
using namespace std;

void binaryRWFile(const char* ReadFlieName, const char* WriteFlieName)
{
    fstream read(ReadFlieName, ios::in|ios::binary);
    fstream writ(WriteFlieName, ios::out|ios::binary);

    while (!read.eof())
    {
        char str[1024] = "";
        read.fstream::read(str, 1024);//出现同名问题 类名限定一下
        writ.write(str, 1024);
    }

    read.close();
    writ.close();
}

int main()
{
    binaryRWFile("读的文件.txt","21323.txt");
  
    return 0;
}

文件指针定位

? ios::beg;//文件开始

? ios::end;//文件末尾

? ios::cur//文件当前位置

#include<iostream>
#include<cstdio>
#include<iomanip>
#include<sstream>
#include<fstream>
using namespace std;
void testSeekRead(const char* ReadFlieName)
{
    fstream fread(ReadFlieName, ios::in);
    fread.seekg(4);
    char key = fread.get();
    cout << key << endl;
    fread.seekg(-4, ios::end);
    key = fread.get();
    cout << key << endl;
}

int main()
{
  
    testSeekRead("读的文件.txt");
    return 0;
}

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-12-08 13:38:17  更:2021-12-08 13:39:32 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 11:59:23-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码