C++文件输入输出语句和输出控制语句

1、ASCII文件(参考谭浩强)

个人理解:用于整数和单个字符的输入输出,文件形式用.txt

仅写出必要语句:

#include<fstream>
#include<iostream>//有些编辑器不需要这一句
using namespace std;
int main(){
//从文件中读入
    ifstream infile("E:\\My C\\data\\test.txt",ios::in);
    int a[10];
    if(!infile){
	    cerr<<"open fail!";
	    exit(1);
    } 
    for(int i=1;i<=10;i++){
	    infile>>a[i];
	    //infile.get(a[i]); 
        cout<<a[i]<<endl;
    }
    infile.close();
    return 0;
}

//向文件中写入
    ofstream outfile("E:\\My C\\data\\test.txt",ios::out);
    char ch;
    outfile<<ch;
    //outfile.put(ch);
//循环语句,将文本内容全部读完
    ifstream infile("E:\\My C\\data\\test.txt",ios::in);
    char ch;
    while(infile.get(ch))
    //while(infile>>ch)

2 二进制文件

二进制文件输入输出更方便,但是我们打开txt文件是不能直接看的。以结构体为例:

(1)读取输出二进制文件所用函数代码示例: 


typedef struct student
{
	char name[20];
	int age;
}student;
//以上为结构体
student s1[3]{"Li",1,"Zhao",2,"Qian",3};

//写进文件中
ofstream outfile("E:\\My C\\data\\test1.txt",ios::binary);
 //报错语句同上,省略
for(int i=0;i<3;i++)
	outfile.write((char*)&s1[i],sizeof(s1[i]));
outfile.close();
//write函数的原型中,第一个参数是字符指针类型,而&s1[i]是一个结构体的地址,所以用(char*)强制转换成字符指针

//从文件中读取
ifstream infile("E:\\My C\\data\\test1.txt",ios::binary);
student s2[3];
for(int i=0;i<3;i++)
	infile.read((char*)&s2[i],sizeof(s2[i]));
// 同write
infile.close();

//读取,两种功能
fstream iofile("E:\\My C\\data\\test1.txt",ios::in|ios::out|ios::binary);

3、按行读取文件,统计文件行数

#include<iostream>
#include<fstream>
#include<string>
using namespace std;
int CountLine(char *filename){
	string ch;
	int Et=0,E_n=0,e_n=0,num;
	ifstream infile(filename,ios::in);
	if(!infile){
		cerr<<"open fail"<<endl;
		exit(0);
	}
	while(getline(infile,ch,'\n')){//这行代码是按行读取的关键
		Et++;
		for(int i=0;i<ch.length();i++){
			if(ch[i]>='A'&&ch[i]<='Z') E_n++;
			if(ch[i]>='a'&&ch[i]<='z') e_n++;
			if(ch[i]>='0'&&ch[i]<='9') num++;					
		}
	}
	cout<<"文件行数"<<Et<<"大写字母数"<<E_n<<"小写字母数"<<e_n<<"数字数"<<num<<endl;
	infile.close();
	return Et;	
}
int main(){
	char ch[100]="E:\\My C\\data\\test1.txt";
	int line=CountLine(ch); 
	return 0;
}

几个用来改变指针位置的函数

seekp,用于输出文件p即为(put)

seekg,用于输入文件g即为(get)

代码示例:

fstream iofile("E:\\My C\\data\\test1.txt",ios::in|ios::out|ios::binary);
iofile.seekg(2*sizeof(s2[0]),ios::beg);
//fstream得到是一个输入输出两用的对象,用seekp,seekg都可以,这句代码效果是:将指针定位到结构体数组中第三个元素的开头
//ios::beg文件开头
//ios::current当前位置
ios::end文件末尾

文件控制语句代码

1、控制文件宽度,填充图案

	cin>>a;
	for(i=1;i<=5;i++){
		cout<<setw(a-i+1)<<setfill(' ')<<" ";//setw控制宽度,参数必须大于零
		cout<<setw(2*i-1)<<setfill('*')<<"*";
		cout<<setw(a-i+1)<<setfill(' ')<<" ";		
		cout<<endl;
	}

运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值