C++学习笔记_09 IO流 2021-04-26

简介: C++学习笔记_09 IO流 2021-04-26
//C++学习笔记_09 IO流 
#include<cstdio>
#include<cstring>
#include<iomanip>
#include<iostream>
#include<fstream>
#include<sstream>
using namespace std;
void Test_iostream()
{
    //输出字符串到控制台, 怎么输出的?
    //把 "Hello world!" 这串数据,送到 cout 对象里面去 ==》 在控制台进行输出
    cout << "Hello world!" << endl;
    int x;
    //把cin对象中的数据,送到 x 里面来   ==》控制台输入数据 --> x 接受
    cin >> x;
    printf("x=%d\n", x); //输出10进制数
    printf("x=%x\n", x); //输出16进制
    cout << "x=" << x << endl; //默认输出10进制
    cout << "x=" << hex << x << "; " << dec << x << endl; //输出16进制  //八进制  oct //十进制 dec
}
void Test_fstream()
{
    //输出文件流 --> 把数据,从内存 输出到文件  --> 写文件操作
    ofstream ofs("a.txt"); //相对路径:默认使用当前程序路径
                           //我们也可以使用绝对路径  c:\xxx\a.txt
                           //使用绝对路径的时候要注意 \ 是转义字符
                           //我们应该写 ofstream ofs("c:\\xxx\\a.txt")
    if (ofs.is_open()){
        cout << "1 3 4 7 9" << endl; //输出给 cout
        ofs  << "1 3 4 7 9" << endl; //输出给 ofs
        ofs << "2 4 6 8 10" << endl;
        //写文件的时候,想把这一行,写到文件开头 --》使用 seekp 函数重新定位指针
        ofs.seekp(0, ios::beg); //第一个参数,表示偏移量: 负数-往前偏移, 正数-往后偏移
                                //第二个参数,表示基址:ios::beg 文件开始,ios::end 文件结尾, ios::cur 文件当前位置
        ofs << "1 2 3 4 5" << endl;//--》把原来的第一行 1 3 4 7 9 覆盖了
    }
    ofs.close();  //我们需要手动关闭文件,不会在析构函数里面关闭
                  //因为我们一个 ofs 可以多次打开文件
    ofs.open("b.txt");
    ofs << "hello world" << endl;
    ofs << "helloC++" << endl;
    ofs.close();
    //读文件:  文件输入流: 把数据输入到内存 
    ifstream  ifs("a.txt");
    int arr[5] = {0};
    int i = 0;
    if (ifs.is_open()){
        //我们想读第二行数据, 把文件偏移到第二行
        ifs.seekg(10, ios::beg);//get:读  //往后偏移 10 个 字符
        //判断文件末尾  ifs.eof() 返回ture 表示文件指针指到了结束位置
        while (!ifs.eof() && i < 5){
            //cin >> arr[i];
            ifs >> arr[i];i++;
        }
    }
    ifs.close();
    cout << "arr: ";
    for (i = 0; i < 5; i++) {cout << arr[i] << " ";}
    cout << endl << endl;
    //文件的打开方式:
    //ios::in   读文件
    //ios::out  写文件
    //ios::app  追加, 打开文件的时候,文件指针指到了文件末尾
    //ios::binary 二进制打开文件(二进制读写文件,文件不会失真)
    //ios::trunc  废弃当前文件内容:写文件的时候--》先清空文件再写
    char szBuf[100];
    //fstream fs("b.txt", ios::in | ios::trunc); //ios::in 和 ios::trunc 冲突
    fstream fs("b.txt", ios::in);
    //fs.good()  文件能正常操作 1, 否则为 0
    //fs.bad()   文件出错了 返回 1
    //如果遇到 bad 返回 1 ---》 fs.clear() 重置 --》重置后就可以重新打开文件进行操作了
    cout << "good? " << fs.good() << endl;
    cout << "bad ? " << fs.bad() << endl;
    if (fs.is_open()){
        //fs >> szBuf;
        //cout << "szBuf:" << szBuf << endl;
        fs << "HelloC++";
        //fs >> szBuf;
        //cout << "szBuf:" << szBuf << endl;
    }
    else  cout << "open file failed!" << endl << endl; 
    fs.close();
   //其它读写文件的方式
    //put(char) 函数, 在文件指针位置写一个字符
    char szStr[100] = "The end";
    fs.open("a.txt", ios::app);
    fs.put('E'); //写一个字符
    fs.write(szStr, strlen(szStr));  //写一段字符串
    fs.close();
    fs.open("b.txt", ios::in);
    fs.get(szStr, 100);  //可以读一段字符串, 最多读 100个字符,遇到 \n 结束
    cout << szStr << endl << endl;
    fs.seekg(0, ios::beg); //指针跳到文件开始位置
    fs.get(szStr, 100, '+'); //读一段字符,最多读100个字符,遇到 '+' 结束
    cout << szStr << endl << endl;
    fs.seekg(0, ios::beg);
    fs.read(szStr, 100);   //按块读取,读满 100 个字符 (除非到了文件末尾)
    cout << szStr << endl << endl;
    fs.close();
    return;
}
void Test_sstream()
{
    string ss("abcd");
    istringstream istrs(ss); //使用 ss 这个字符串初始化流 
    char szArr[10];
    istrs >> szArr;  //从字符串流中读取数据,类似与读写文件,不过这里是流数据在内存中 
    cout << "szArr:" << szArr << endl;//错误输出 有缓冲  
    cout << "istrs:" << istrs.str() << endl;//普通输出 无缓冲  
    ostringstream ostrs(ss);
    char szBuf[] = "Hello world";  
    ostrs << szBuf;  //把szBuf 写入到 字符串流,也就是写到了 ss 中
    cout << "ss   :" << ss << endl;
}
int main()
{
    //Test_iostream();
    //Test_fstream();
    Test_sstream();
    system("pause");
  return 0;
}
相关文章
|
2月前
|
C++
c++学习笔记07 结构体
C++结构体的详细学习笔记07,涵盖了结构体的定义、使用、数组、指针、嵌套、与函数的交互以及在结构体中使用const的示例和解释。
34 0
|
1月前
|
安全 C语言 C++
C++学习笔记
C++学习笔记
|
2月前
|
算法 C++
c++学习笔记04 数组
这篇文章是C++学习笔记4,主题是数组。
38 4
|
2月前
|
C++
【学习笔记】【C/C++】 c++字面值常量
【学习笔记】【C/C++】 c++字面值常量
29 1
|
2月前
|
存储 C++
c++学习笔记05 函数
C++函数使用的详细学习笔记05,包括函数的基本格式、值传递、函数声明、以及如何在不同文件中组织函数代码的示例和技巧。
30 0
c++学习笔记05 函数
|
2月前
|
编译器 C++
【C/C++学习笔记】C++声明与定义以及头文件与源文件的用途
【C/C++学习笔记】C++声明与定义以及头文件与源文件的用途
35 0
|
2月前
|
存储 C++
【C/C++学习笔记】string 类型的输入操作符和 getline 函数分别如何处理空白字符
【C/C++学习笔记】string 类型的输入操作符和 getline 函数分别如何处理空白字符
33 0
|
2月前
|
C++
c++学习笔记09 引用
C++引用的详细学习笔记,解释了引用的概念、语法、使用注意事项以及引用与变量的关系。
40 0
|
2月前
|
存储 程序员 编译器
c++学习笔记08 内存分区、new和delete的用法
C++内存管理的学习笔记08,介绍了内存分区的概念,包括代码区、全局区、堆区和栈区,以及如何在堆区使用`new`和`delete`进行内存分配和释放。
40 0
|
2月前
|
存储 C++
c++学习笔记06 指针
C++指针的详细学习笔记06,涵盖了指针的定义、使用、内存占用、空指针和野指针的概念,以及指针与数组、函数的关系和使用技巧。
30 0