流的概念
数据传输像流水,不管数据的类型,都按字节二进制传输。输入输出时不区分类型,把数据都当二进制流对待,系统根据需要自动转换数据类型。
三种基本流
标准I/O:键盘—>内存程序—>显示器
文件I/O::磁盘文件—>程序—>文件
字符串I/O: 内存—>程序—>内存
头文件:
#include <iostream> 用于标准I/O
#include <fstream> 用于文件I/O
#include <sstream> 用于字符串I/O
#include <string> 载入string类
标准I/O流对象
cin和cout都是对象,可以调用函数。
cin.get():获取一个字符
cin.getline():获取一行字符
cin.peek():获取当前字符的ASCII码
cin.putback() :把指定字符插入到流中当前的位置
cout.put( ):单个输出字符
文件I/O流
文件取名:不能使用* ? < > | “ : / \ 这9个字符
文件分类:
按数据的存储格式:文本文件(人看的),二进制文件(计算机运行用的)
按用途分(按扩展名):*.mp3, *.docx , *.avi….
设备文件名:系统占用了的,不能被一般用户占用,如:
COM1 , Con 表示控制台键盘显示器; LPT并口(用于接一些通信设备或打印机)
文件流类:#include <fstream>
1>ofstream:输出类,用于向文件中写数据的
2>ifstream:输入类,从磁盘上读数据到内存的
3>fstream: I/O类,读或写文件都可以
文件流工作原理
操作文件的三个步骤:
打开磁盘文件 ——>(读或写入内存) ——>关闭文件
open()——>(fin>> fout<<) ——>close()
ofstream从内存写入到文本文件中去
void main(){
ofstream fout;//1、创建一个文件流输出对象
fout.open("A:\\studeng.txt",ios::out);//2、文件输出流对象调用开启函数-指定文件的路径、指定数据写入方式为ios::out
//追加方式是ios::app
int arr[3]={5,2,0};//将数组内容写入文本文件中去
for (int i = 0; i < 3; i++)
{
//3、文件流输出对象输出数据,与cout的格式相同
fout << arr[i]<<" ";
}
fout.close();//4、关闭文件流输出对象
fout.open("A:\\studeng.txt", ios::app);//可以追加内容到文本中
system("pause");
}
ifstream从文本文件中读取到内存中去
void mian(){
ifstream fin;//实例化输入对象fin
fin.open("A:\\studeng.txt", ios::in);//指定路径(注意\\是转义字符),输入方式
int no = 1;
student* st = (student*)calloc(sizeof(student), no);
while (!fin.eof())
{
fin >> sh0;fin >> xm0; fin >> xb0; fin >> heigh0; fin >> score0;
(st+(no-1))->setstudent(sh0,xm0, xb0, heigh0, score0);
//从文本文件中获取输入数据,赋值给student对象
//cout << sh0 << xm0<< xb0<<heigh0 << score0 << endl;
no++;
st = (student*)realloc(st, sizeof(student)*(no));//动态增加一个结点
}
fin.close();
}