C++ 输入输出和文件

来源:互联网 发布:mac 导入图片位置 编辑:程序博客网 时间:2024/06/05 16:06

C++ 输入输出和文件


本文主要包含如下内容:

  • C 输入输出和文件
    • 缓冲区
    • cout输出格式控制
      • 计数系统格式
      • setf设置
      • 头文件iomanip
    • cin输入格式控制
      • 流状态
    • 文件的输入与输出
      • 文件模式
      • 随机存取


缓冲区


  缓冲区是内存中的临时储存工具,是程序与文件或其他I/O设备之间的桥梁。可以帮助匹配信息传递的速度。

  信息在缓冲区和程序之间传输时,是逐字节传输的。信息在缓冲区和文件之间传输时,是以大块数据的方式进行传输。


cout输出格式控制


计数系统格式:

  dechexoct控制符用以显示十进制、十六进制、八进制

cout << hex;//  hex(cout);

setf()设置:

  除了使用setf(),还可以使用还可以使用标准控制符。

常量 含 义 ios_base::boolapha 输入和输出为bool值(ture或false) ios_base::showpoint 显示末尾的小数点 ios_base::showpos 在正数前面加上+ ios_base::showbase 使用前缀(0, 0x) ios_base::uppercase 对于16进制输出,使用大写字母表示法 第二个参数 第一个参数 含 义 ios_base::basefield ios_base::dec 使用基数10 ios_base::oct 使用基数8 ios_base::hex 使用基数16 ios_base::floatfield ios_base::fixed 使用定点计数法 ios_base::scientific 使用科学计数法 ios_base::adjustfield ios_base::left 使用左对齐 ios_base::right 使用右对齐 ios_base::internal 符号或基数前缀左对齐,值右对齐

标准控制符
标准控制符

  unsetf()清除效果,切换回默认模式

    #include <iostream>    #include <cmath>    int main()    {    using namespace std;    cout.setf(ios_base::showpoint);     //显示小数点,自动填零    cout.precision(3);      //显示小数点后三位有效数字    cout.setf(ios_base::fixed, ios_base::floatfield);   //使用定点计数法    long n;        for(n = 1; n <= 41; n+=10)         {            cout.width(4);            cout<< n << "|";            cout<<sqrt(double(n))<< "|\n";        }    return 0;    }

头文件iomanip:

  setprecision()用来设置精度;

  setfill()用来填充字符;

  setw()用来设置字段宽度;

    cout << std::setw(6)  << std::setfill('.') << 10 <<  set::setfill(' ');    cout << std::setw(12) << std::setprecision(3) << 3.162;

cin输入格式控制


  cin跳过空白(空格、换行符和制表符),直到遇到空白字符。
  get(char&)get(void)提供不跳过空白的单字符输入功能。
  函数get(char*,int,char)getline(char*,int,char)在默认情况下读取整行而不是一个单词。

get(char&)和get(void)

特征 cin.get(ch) ch=cin.get() 传输输入字符的方法 赋值参数ch 将函数返回值赋给ch 字符输入时函数的返回值 指向isteam对象的引用 字符编码(int值) 达到文件尾时函数的返回值 转换为false EOF

get(char*,int,char)和getline(char*,int,char)

istream & get(char *, int, char);istream & get(char *, int);istream & getline(char *, int, char);istream & getline(char *, int);

  第一个参数用于放置输入字符串的内存单元的地址。第二个参数比要读取的最大字符数大1。第三个参数指定用作分解符的字符(默认将换行符用作分解符)。
  get()将分界字符留在输入队列中,而getline()不保留,并丢弃输入中的分界字符。

方法 行为 get(char *, int) 如果没有读取任何字符,则设置failbit;如果读取了最大数目的字符,且行中还有其他字符,则设置failbit get(char *, int) 如果没有读取任何字符,则设置failbit

read()、peek()、putback()

  read()函数读取指定数目的字节,并将它们储存在指定的位置中。
  peek()函数返回输入中的下一个字符,但不抽取输入流中的字符。
  putback()函数将一个字符插入到输入字符串中,peek()的效果相当于先使用get()读取一个字符,然后使用putback()将该字符放回输入流中。

    while(cin.peek()!='#')        {            cin.get(ch);            cout << ch ;        }

write()

  write()函数将内存中指定数目的字节复制到文件中。功能与read()相反。

    ifstream fin;   //初始化流    fin.open(file, ios_base::in |ios_base::binary);     //将流与文件关联起来,且设置对应的模式    ofstream fout(file,ios_base::out | ios_base::app |ios_base::binary);    fin.read((char*) &p1, sizeof p1);    //读取文件    fout.write((char *) &p1, sizeof p1);

流状态:

eofbit: 当cin操作到达文件末尾时,它将设置eofbit;
failbit:当cin操作未能读取到预期的字符时,它将设置failbit;
badbit: 在一些无法诊断的失败破坏流时,badbit元素将被设置;

  当全部3个状态都设置为0时,说明一切顺利。

clear(); 将清除全部的状态位eofbit、failbit、badbit;
setstate(); 该方法只影响其参数中已设置的位,不会影响其他位。


文件的输入与输出


  磁盘驱动器被设计为以大块的方式传递数据,而不是逐字节的传输,因此通过缓冲可以大大提高从程序到文件传输数据的速度。

  要将文件与流文件关联起来,可以在初始化文件流对象时提供文件名,也可以先创建一个文件流对象,然后用open()方法将这个流与文件关联起来。close()方法终止流与文件之间的连接。

文件模式:

  设置格式:

    ifstream fin(file, model);     ofstream fout();     fout.open(file, model);
常量 含义 ios_base::in 打开文件,以便读取 ios_base::out 打开文件,以便写入 ios_base::ate 打开文件,并移动文件尾 ios_base::app 追加到文件尾(添加新信息) ios_base::trunc 如果文件存在,则截短文件(将以前内容删除) ios_base::binary 二进制文件(存储数据精确准确、简介,但是可移植性差)
    ifstream fin;    fin.clear();    //清空相关设置    fin.open(file, ios_base::in |ios_base::binary);     //初始化并关联流文件    if (fin.is_open())      //重要,检索文件是否已经打开    {        cout << "Here are the current contents of the " << file <<"file:\n";        while(fin.read((char*) &p1, sizeof p1))     //使用read()函数读取文件内容        {            cout <<setw(20) <<p1.name <<":" << setprecision(0) <<setw(12) << p1.population << setprecision(2) <<setw(6) << p1.g << endl;        }        fin.close();    }

随机存取:

seekg()和seekp():将输入指针移动到指定的文件位置,将输出指针移动到指定的文件位置。

  seekg()设置格式:

    istream & seekg(streamoff, ios_base::seekdir);    istream & seekg(streampos);

  第一个原型的参数:streamoff被用来度量相对于文件特定位置的偏移量(单位为字节)。ios_base::seekdir有3个可能值,ios_base::beg指相对于文件开始处的偏移量,ios_base::cur指相对于当前位置的偏移量,ios_base::end指相对于文件尾的偏移量。

  第二个原型的参数:streampos类型的值定位到文件中的一个位置,streampos值表示文件中的绝对位置。

tellg()和tellp():检查文件指针的当前位置,分别对输入流和输出流而言。

阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 古田1929 古田县 古田路 古田顺子 古田美穗 古田客运站 古田会址 福建古田 古田精神 古田旅游 古田美惠 古田伊织 古田桥 古田临水宫 古田翠屏湖 古田火车站 古田顺子案 古田站 古田森 古田在哪里 古田美穂 古田招聘 古田房产网 古田镇 古田在哪 古田在线 古田论坛 古田一中 广东惠东古田省级自然保护区 古田县属于哪个市 古田1929观后感 福建古田县属于哪个市 古田客运站时刻表 古田玉田在线 352200 古画 古画图片 梅花古画 著名古画 古画复制 中国古画