C++ 文件

本文详细介绍了C++中的文件输入输出操作,包括`cin.get()`和`getline()`的区别,以及精度控制方法如`setprecision()`和`fixed`。此外,还讲解了不同文件打开模式的用法,如`ios::in`、`ios::out`等,并提到了EOF的概念。
摘要由CSDN通过智能技术生成

输入

char a,b;

  1. cin>>a 遇到空白字符就认为结束
  2. cin.get(a) ; b=cin.get() 输入一个字符给a,
    但是b=cin.get() 会承接输入字符给a后的一个enter,space,tab等,把他们继续留在缓冲区中
    因此a是一个字符,b是一个enter/space/tab
  3. cin.get(arrayname, size, s) 把数据输入到arrayname字符组中,但输入长度到达size时结束或者遇到字符s时结束
    arrayname必须是字符数组,就像下面的a[10]一样,不可以是string,
    size是最大的输入长度
    s为控制,遇到s那么当前输入结束,缓冲区中的s将被舍弃

cin.get(arrayname, size) 当遇到enter时会结束目前的输入,并不会删除缓冲区中的enter
cin.getline(arrayname, size) 当遇到entre时会结束目前的输入,但是会删除缓冲区中的enter

char a[10];   
cin.get(a,20);          
cout<<a<<endl;
cout<<sizeof(a)<<endl;
//输入输出
1.------------
iam
iam
10
2.------------
iamlixinxin
iamlixinxin
10
3.------------
iamlixinxinxinxixnixnxin
iamlixinxinxinxixni
10

总之 :getline会删除缓冲区中的内容,get 并不会删除缓冲区中的内容

输出

ios::left 在串的末尾插填入充字符以使其左对齐
ios::right 在前面插入字符使其右对齐
ios::fixed 将浮点数按照普通定点格式处理

// #include<iostream>
char c[30]="this is string";

cout.width(30);
cout.fill('*');
//靠左对齐
cout.setf(ios::left);
//输出c和---L1
cout<<c<<"---L1"<<endl;
上面的结果等价于下面的  
// #include<iomanip>
cout<<setw(30)<<left<<setfill('*')<<c<<"---L6"<<endl;
精度的控制1

showpoint: 表示打印浮点数的小数点和小数位数,即时显示的数值没有小数点,如果没有指定所需的小数点位数,则默认显示6个有效数组
setprecision(n) 表示显示n位有效数字 头文件是iomanip
fixed 是一种流操作符,表示浮点输出应该以固定点或者小数点表示法显示,也就是不使用科学计数法,一般与setprecision(n)一起使用,这是后n就表示小数点后面显示n位数字
当同时使用fixed和setprecision时,不需要使用showpoint
setbase(x) 可以控制精度

//include<iostream>
//include<iomanip>     
double d=-1231.23290;
cout.width(30);
cout<<d<<"---L3"<<"\n";   //没有设置精度,显示的是两位
cout<<d<<endl;    //-1231.23;
cout<<showpoint<<d<<endl;   //-1231.23    默认打印6位数字
cout<<setprecision(3)<<d<<endl;   //-1.23e+03   这里指的是1.23有三位数字
cout<<fixed<<d<<endl;   //cout<<fixed<<setprecision(3)<<d<<endl   1231.233  因为使用了fixed,并且规定了precision
cout<<fixed<<showpoint<<setprecision(3)<<d<<endl;  //这里设置了精度    1231.233 这里指的是.后面只有一位数字


精度的控制2

ios::oct 表示以八进制形式显示
ios::dec 表示以十进制形式显示
ios::hex 表示以十六进制形式显示

ios::showbase 表示为整数添加一个表示其进制的前缀
ios::showpoint 表示在浮点数表示的小数中强制插入小数点
ios::setw(n) 控制输出的间隔,默认是右对齐
ios::fixed 一种流操作符,表示浮点输出应该以固定点或者小数点表示法显示,也就是不使用科学计数法,

//下面这个例子其实是无效的,只是刚好默认的是十进制形式而已
// #include<iostream>
cout.setf(ios::dec|ios::showbase|ios::showpoint);    
cout<<d<<endl;  //-1231.23

//下面的例子是没有效果的
cout.setf(ios::hex|ios::showbase|ios::showpoint);   
cout<<d<<endl;  //-1231.23
//这个是有用的
cout.setf(ios::hex,ios::basefield);    //告诉除了hex有用之外,其他均需要取消设置
cout.setf(ios::showbase|ios::showpoint);        //这时设置的showbase是有用的,但是showpoint是不管用的
cout.width(30);
cout<<27<<"---L3"<<"\n";  // --------------------------0x1b---L3

?上面的例子中showbase是有用的,但是showpoint没有效果,并且将27换成浮点数比如19.19之后,得到的结果还是19.19,没有十六进制的转换,也没有十六进制的标志

//也可以这样写
cout.setf(ios::oct,ios::basefield);
cout<<100<<"----L5"<<"\n";

文件输入输出

#include<fstream>
ofstream    //文件的写操作,写入存储设备, 从内存中读出
ifstream 	//文件的读操作,存储设备读取到内存中,向内存写入
fstream		//读写操作,对打开的文件进行读写操作

文件的打开

void open ( const char * filename,
            ios_base::openmode mode = ios_base::in | ios_base::out );

mode表示的是文件打开的方式

ios::in 输入到内存 也就是读
ios::out 输出到内存 也就是写
ios::ate 初始位置:文件末尾
ios::app 所有输出附加在文件末尾
ios::trunc 如果文件已存在则先删除文件
ios::binary 二进制方式

#include<iostream>
#include<fstream>

using namespace std;

int main(int argc, char const *argv[])
{
    fstream ioFile;
    ioFile.open("./a.dat",ios::out);   //不会自己创建a.dat
    ioFile<<"李四"<< " "<< 73<<" "<< 98<<" "<<60<<endl;      //但是是从内存中读出到文件中, 重写a.dat文件
    ioFile<<"王五"<< " "<< 74<<" "<< 97<<" "<<61<<endl;
    ioFile<<"张三"<< " "<< 75<<" "<< 96<<" "<<62<<endl;
    ioFile<<"钱六"<< " "<< 76<<" "<< 95<<" "<<63<<endl;
    ioFile<<"黄七"<< " "<< 77<<" "<< 94<<" "<<64<<endl;
    ioFile.close();

    ioFile.open("./a.dat",ios::in|ios::binary); //以二进制的形式读取到内存
    char name[10];
    int chinese, math, computer;
    cout<<"姓名\t"<<"英语\t"<<"数学\t"<<"计算机\t"<<"总分"<<endl;  //从内存中读出
    ioFile>>name;
    while(!ioFile.eof())
    {
        ioFile>>chinese>>math>>computer;
        cout<<name<<"\t"<<chinese<<"\t"<<math<<"\t"<<computer<<"\t"<<chinese+math+computer<<endl;
        ioFile>>name;
    }
    ioFile.close();
    system("pause");
    return 0;
}

EOF
是end of file 的缩写,表示文字流(stream)的结尾,可以是文件,也可以是标准输入输出stdin

int main()
{
    char ch;
    ofstream out("./test.dat",ios::out|ios::binary);// 从内存中读取到test.dat
    for(int i=0;i<90;i++)
    {
        if(i>0&&(i%30)==0)
        {out.put('\n');
        out.put(i);
        out.put(' ');}
    }
    out.close();
    ifstream in("./test.dat",ios::in|ios::binary);
    while(in.get(ch))
    cout<<ch;
    in.close();
    return 0;
}
//result
                
 
  
              
 1 2 3 4 5 6 7 8 9 : ; 
< = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y

参考:
C++
C语言中文网
C++文件读写详解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值