【C++】IO学习笔记

一、面向控制台的输入/输出

1、基于函数库的控制台I/O

输出:

//输出字符ch,函数返回输出的字符或者EOF(操作失败)
int putchar(int ch); 
//输出char*型字符串,函数返回一个非负整数或者EOF(操作失败)
int puts(const char*p);
//对基本类型数据进行输出,函数返回输出的字符个数或者返回负数(操作失败)
int printf(const char *format  [, <参数表>]);

输入:

//从键盘输入一个字符,返回输入的字符或返回EOF(操作失败)
int getchar();
//从键盘输入一个字符串放入p所指的内存空间,成功时返回p,否则返回NULL
char *gets(char *p);
//对基本类型的数据进行输入,返回实际输入的数据个数或返回EOF(操作失败)
int scanf(const char *format  [, <参数表>]);

2、基于类库的控制台I/O  (#include <iostream>)

输入:

cin (istream类对象)

setw(int n) //指定输入字符的最大个数

例:cin.getline(str,10);  //输入带空格的字符串

输出:

cout,cerr,clog  (ostream类的对象)

cout对应计算机系统的标准输入设备;cerr和clog对应用于输出程序错误信息的设备

cerr和clog不受输出重定向的影响

endl //输出换行符,执行flush
dec //十进制输出(月份前三个字母)
oct //八进制
hex //十六进制
setprecision(int n) //设置符点数的精度

还有ostream类提供的一些字节流成员,如put,write函数,write函数再后文中输出二进制数据时有用到。

3、抽取/插入操作符“>>”和"<<"的重载

 重载举例:

class A
{
    int x,y;
public:
    friend ostream& operator << (ostream& out, const A &a);
}

ostream& operator << (ostream& out, const A &a)
{
    out<<a.x<<','<<a.y;
    return out;
}

对于A类的派生类B,如果没有针对类B重载插入操作符"<<",则B类对象的输出按A类进行

对于以下问题

A *p;
//p可能指向A类对象,也可能指向B类对象
cout<<*p;
//不管p指向什么对象,都调用A类的重载函数

解决上述问题的方法就是再类A中定义一个虚函数display,派生类中进行重定义,可以实现动态绑定。

二、(⭐)面向文件的输入/输出

文件概述:在文件中,数据的存储方式有两种—>文本方式和二进制方式

两种方式的主要区别是:文本文件中只包含可显示字符和有限的几个控制字符;而二进制文件中可以包含任意的没有显示含式的二进制字节

(注:以二进制方式组织的文件不利于文件在不同的计算机平台上使用)

1、基于函数库的文件I/O

因为笔者对这部分操作使用不太习惯,所以暂时跳过,以后有时间再补上吧。

2、基于类库的文件I/O

 包含的头文件; #include <iostream>;      #include <fstream>

 输出:

ofstream out_file;
out_file.open(<文件名>, <打开方式>);
//打开方式:ios::out  写操作       
//ios::app  后续添加      
//ios::binary  二进制文件打开
if(!out_file) exit(-1)
//out_file << x << y <<endl; 以文本方式输出
out_file.write((char *)&x,sizeof(x));  //以二进制方式输出
out_file.close();

输入:

ifstream in_file(<文件名>, ios::in|ios::binary); //以二进制文件读入
if(!in_file) exit(-1);
in_file.read((char *) &x,sizeof(x));  //以二进制方式输入数据
in_file.close();

  

三、面向字符串的输入/输出

基于字符串变量的输入/输出功能的库函数主要是sscanf 和 sprintf

这里的输入源和输出目标是内存中的一个区域:buffer

因为笔者目前还用不到这一部分的内容,所以就不详细介绍啦~

猜你喜欢

转载自www.cnblogs.com/stucky/p/10934749.html