• C++的IO处理中的头文件以及类理解(1)


      C++语言不直接处理输入输出,而是通过一簇定义在标准库中的类型来处理IO。这些类型支持从设备读取数据、向设备写入数据的IO操作,设备可以是文件控制台窗口等,还有一些类型允许内存IO,即,从string读取数据,向string写入数据。

      C++使用标准库类来处理面向流的输入和输出,主要是通过三个头文件来进行操作的

     

    (1)、<iostream> 处理控制台IO;面向控制台IO处理。

    (2)、<fstream> 处理命名文件IO;面向文件IO处理。

    (3)、<sstream>完成内存string的IO。面向内存IO处理

    其中:

     <iostream>也自动包含了<ios>、<streambuf>、<istream>、<ostream>和<iosfwd>

    其他两个头文件放在下一个博客中介绍。

    头文件<iostream>中的对象包括:
    (1)、narrow characters(char)即窄字符:cin(standard input stream (object))、cout(standard output stream (object))、cerr(standard output stream for errors (object))、clog(standard output stream for logging (object));
    
    (2)、wide characters(wchar_t)即宽字符:wcin(standard input stream (wide) (object))、wcout(standard output stream (wide)  (object))、wcerr(standard output stream for errors  (wide)  (object))、wclog(standard output stream for logging (wide) (object))。
     
    
    __PURE_APPDOMAIN_GLOBAL extern _CRTDATA2 istream cin, *_Ptr_cin;
    __PURE_APPDOMAIN_GLOBAL extern _CRTDATA2 ostream cout, *_Ptr_cout;
    __PURE_APPDOMAIN_GLOBAL extern _CRTDATA2 ostream cerr, *_Ptr_cerr;
    __PURE_APPDOMAIN_GLOBAL extern _CRTDATA2 ostream clog, *_Ptr_clog;
     
    __PURE_APPDOMAIN_GLOBAL extern _CRTDATA2 wistream wcin, *_Ptr_wcin;
    __PURE_APPDOMAIN_GLOBAL extern _CRTDATA2 wostream wcout, *_Ptr_wcout;
    __PURE_APPDOMAIN_GLOBAL extern _CRTDATA2 wostream wcerr, *_Ptr_wcerr;
    __PURE_APPDOMAIN_GLOBAL extern _CRTDATA2 wostream wclog, *_Ptr_wclog;

      C ++ 中所有的IO头文件,以及其内的类型定义 

      

     各种类型简介:

    类型:

    (1)istream(输入流)类,提供输入操作;

    (2)ostream(输出流)类,提供输出操作;

    (3)iostream(输入输出流)类

    实例:

    cin,一个istream对象,标准输入流,用来从标准输入读取数据;

    cout,一个ostream对象,标准输出流,从标准输出写入数据,输出可以重定向( “>” 或“1>”)到一个指定文件中;用于将数据写入标准输出,通常用于程序的正常输出内容,

    cerr,一个ostream对象,标准错误流,通常用于输出程序错误信息或与其它不属于正常逻辑的输出内容,写入到标准错误,默认情况下,写到cerr的数据是不缓冲的错误信息可以直接发送到显示器,而无需等到缓冲区或者新的换行符时,才被显示;可以通过” 2> ”方式重定向输出到指定文件中;cerr通常用于输出错误信息或其它不属于程序正常逻辑的输出内容。

    clog:一个ostream对象,标准错误流,关联到标准错误;与cerr区别:cerr和clog都是标准错误流,区别在于cerr不经过缓冲区,直接向显示器输出信息,而clog中的信息默认会存放在缓冲区,缓冲区满或者遇到endl时才输出默认情况下,写到clog的数据是被缓冲的。clog通常用于报告程序的执行信息,存入一个日志文件中 

    操作:

    >>运算符,用来从一个istream对象读取输入数据;

    <<运算符,用来向一个ostream对象写入输出数据;

    getline函数,从一个给定的istream读取一行数据,存入一个给定的string对象中

       IO库类型和头文件:iostream定义了用于读写流的基本类型,fstream定义了读写命名文件的类型,sstream定义了读写内存string对象的类型,如下图:

     

      

      为了支持使用宽字符的语言,标准库定义了一组类型和对象来操纵wchar_t类型的数据。宽字符版本的类型和函数的名字以一个w开始。例如,wcin、wcout和wcerr是分别对应cin、cout和cerr的宽字符版对象。宽字符版本的类型和对象与其对应的普通char版本的类型定义在同一个头文件中。
    测试程序:

    #include "iostream.hpp"
    #include <iostream>
     
    // reference: http://www.tutorialspoint.com/cplusplus/cpp_basic_input_output.htm
    int test_iostream_cout()
    {
        char str[] = "Hello C++";
        std::cout << "Value of str is : " << str << std::endl;
     
        return 0;
    }
     
    int test_iostream_cin()
    {
        char name[50];
     
        std::cout << "Please enter your name: ";
        std::cin >> name;
        std::cout << "Your name is: " << name << std::endl;
     
        return 0;
    }
     
    int test_iostream_clog()
    {
        char str[] = "Unable to read....";
        std::clog << "Error message : " << str << std::endl;
     
        return 0;
    }
     
    int test_iostream_cerr()
    {
        char str[] = "Unable to read....";
        std::cerr << "Error message : " << str << std::endl;
     
        return 0;
    }
     
    // reference: https://msdn.microsoft.com/en-us/library/6xwbdak2(v=vs.80).aspx
    static void TestWide()
    {
        int i = 0;
        std::wcout << L"Enter a number: ";
        std::wcin >> i;
        std::wcerr << L"test for wcerr" << std::endl;
        std::wclog << L"test for wclog" << std::endl;
    }
     
    int test_iostream_w()
    {
        int i = 0;
        std::cout << "Enter a number: ";
        std::cin >> i;
        std::cerr << "test for cerr" << std::endl;
        std::clog << "test for clog" << std::endl;
     
        TestWide();
     
        return 0;
    }
  • 相关阅读:
    第二次作业循环语句
    c语言01次作业分支,顺序结构
    PAT 1027. Colors in Mars
    PAT 1026 Table Tennis
    PAT 1035 Password
    PAT 1038. Recover the Smallest Number
    PAT 1028 List Sorting (25)
    PAT 1041 Be Unique (20)
    PAT 1025 PAT Ranking
    1037. Magic Coupon
  • 原文地址:https://www.cnblogs.com/icmzn/p/10295180.html
Copyright © 2020-2023  润新知