最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++中輸入輸出流及文件流操作總結(jié)

 更新時間:2016年10月22日 11:34:20   作者:沙米筆記  
這篇文章主要為大家總結(jié)了C++中輸入輸出流及文件流操作,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了C++中輸入輸出流及文件流操作筆記,供大家參考,具體內(nèi)容如下

1、流的控制

    iomanip          在使用格式化I/O時應(yīng)包含此頭文件。
    stdiostream   用于混合使用C和C + +的I/O機制時,例如想將C程序轉(zhuǎn)變?yōu)镃++程序

2、類繼承關(guān)系


ios是抽象基類,由它派生出istream類和ostream類, iostream類支持輸入輸出操作,iostream類是從istream類和ostream類通過多重繼承而派生的類

類ifstream繼承了類istream,類ofstream繼承了類ostream,類fstream繼承了 類iostream

iostream頭文件中4種流對象


cout補充
1、用“cout<<”輸出基本類型的數(shù)據(jù)時,可以不必考慮數(shù)據(jù)是什么類型,系統(tǒng)會判斷數(shù)據(jù)的類型

      并根據(jù)其類型選擇調(diào)用與之匹配的運算符重載函數(shù)。這個過程都是自動的,用戶不必干預(yù)。

        如果在C語言中用prinf函數(shù)輸出不同類型的數(shù)據(jù),必須分別指定相應(yīng)的輸出格式符,十分麻煩,而且容易出錯

2、cout流在內(nèi)存中對應(yīng)開辟了一個緩沖區(qū),用來存放流中的數(shù)據(jù),當(dāng)向cout流插 人一個endl時,

     不論緩沖區(qū)是否已滿,都立即輸出流中所有數(shù)據(jù),然后插入一個換行符, 并刷新流(清空緩沖區(qū))。

        注意如果插人一個換行符”\n“(如cout<<a<<"\n"),則只輸出和換行,而不刷新cout 流(但并不是所有編譯系統(tǒng)都體現(xiàn)出這一區(qū)別)。

3、在iostream中只對"<<"和">>"運算符用于標(biāo)準(zhǔn)類型數(shù)據(jù)的輸入輸出進行了重載,但未對用戶聲明的類型數(shù)據(jù)的輸入輸出 進行重載。

    如果用戶聲明了新的類型,并希望用"<<"和">>"運算符對其進行輸入輸出,按照重運算符重載來做。

cout 流通常是傳送到顯示器輸出,但也可以被重定向 輸出到磁盤文件,而cerr流中的信息只能在顯示器輸出

cerr是不經(jīng)過緩沖區(qū),直接向顯示器上輸出有關(guān)信息,而clog中的信息存放在緩沖區(qū)中,緩沖區(qū)滿后或遇endl時向顯示器輸出

3、標(biāo)準(zhǔn)輸入流 cin

    重點掌握的函數(shù)
    cin.get()                 //讀入一個字符并返回它的值
    cin.get(一個參數(shù))  //讀入一個字符并把它存儲在ch
    cin.get(兩個參數(shù))  //可以讀取字符串
    cin.get(三個參數(shù))  //可以讀字符串       
    cin.getline()
    cin.ignore()           //讀取字符并忽略指定字符
    cin.peek()            //檢查下一個輸入的字符,不會把字符從流中移除
    cin.putback()       //返回一個字符給一個流

重要
1、使用cin,從流中讀出的字符,流中就沒有這字符了,再次讀取時只能讀取剩下的
2、緩沖去只有在遇到EOF、手動敲回車、流(緩存區(qū))滿時,才將流中的字符全部讀出(即清空緩存區(qū))

練習(xí)
1、從流中取一個字符,然后在放進去;
2、判斷流中的第一個字符是不是放進去的那個字符;
3、從流中讀取10個字符;
4、從流中忽略5個字符,再讀取10個字符;
5、最后讀取剩下的字符,最后輸出讀到的所有字符

#include <iostream>
using namespace std;

int main()
{
 char ch1;
 int look;
 char str1[11] = {0};
 char str2[11] = {0};
 char str3[100] = {0};
 
 //從流中取一個字符,然后在放進去
 ch1 = cin.get();
 cin.putback(ch1);

 //判斷流中的第一個字符是不是放進去的那個字符
 look = cin.peek();
 if(look == (int)ch1)
 {
 cout<<"cin.peek()放進去的字符在第一個位置"<<endl;
 }
 else
 {
 cout<<"cin.peek()放進去的字符不是在第一個位置"<<endl;
 }

 //從流中讀取10個字符
 cin.get(str1,11);

 //從流中忽略5個字符,再讀取10個字符
 cin.ignore(5);
 cin.get(str2,11,EOF);

 //最后讀取剩下的字符,最后輸出讀到的所有字符
 cin.getline(str3,100);

 //輸出讀到的數(shù)據(jù)
 cout<<"第一個字符"<<ch1<<endl;
 cout<<"第一組 字符串:"<<str1<<endl;
 cout<<"第二組 字符串:"<<str2<<endl;
 cout<<"剩下的字符串:"<<str3<<endl;

 system("pause");
 return 0;
}

輸出:

0123456789abcde9876543210zzzzzzzzzzxxxxxxxxxxxxxyyyyyyyyyyyy
cin.peek()放進去的字符在第一個位置
第一個字符0
第一組 字符串:0123456789
第二組 字符串:9876543210
剩下的字符串:zzzzzzzzzzxxxxxxxxxxxxxyyyyyyyyyyyy

4、標(biāo)準(zhǔn)輸出流 cout

  流成員函數(shù)

  cout.flush()      //清空緩沖區(qū)
  cout.put()        //把字符寫入流中
  cout.write()      //將字符串寫入當(dāng)前輸出流中

  eg : cout.setf( ios::dec );

         cout.setf(ios::hex,ios::basefield);【建議使用這種】

 需注意:

1、fmtflags setf( fmtflags flags ); 使用這種,一定要先取消當(dāng)前基【cout.unself()】,之后才可以設(shè)置新的基

 2、fmtflags setf( fmtflags flags, fmtflags needed ); 使用這種,第二個參數(shù)設(shè)為當(dāng)前的基,或者當(dāng)不知道當(dāng)前基時,設(shè)為ios_base::basefield清除當(dāng)前的所有可能的基   

控制符,頭文件<iomanip>


eg:  cout<<setw(5);

5、文件I/O

由于文件設(shè)備并不像顯示器屏幕與鍵盤那樣是標(biāo)準(zhǔn)默認設(shè)備,不能像cout那樣預(yù)先定義的全局對象,所以我們必須自己定義一個該類的對象。

ifstream類,它是從istream類派生的,用來支持從磁盤文件的輸入。

ofstream類,它是從ostream類派生的,用來支持向磁盤文件的輸出。

fstream類,它是從iostream類派生的,用來支持對磁盤文件的輸入輸出。

文件原理

    文件打開都有一個文件指針,該指針的初始位置由I/O方式指定,每次讀寫都從文件指針的當(dāng)前位置開始。每讀入一個字節(jié),指針就后移一個字節(jié)。當(dāng)文件指針移到最后,就會遇到文件結(jié)束EOF(文件結(jié)束符也占一個字節(jié),其值為-1),此時流對象的成員函數(shù)eof的值為非0值(一般設(shè)為1),表示文件結(jié)束 了。

    文件關(guān)閉,實際上是解除該磁盤文件與文件流的關(guān)聯(lián),原來設(shè)置的工作方式也失效,這樣,就不能再通過文件流對該文件進行輸入或輸出

    文件類型:1、ASCII文件:文件的每一個字節(jié)中均以ASCII代碼形式存放數(shù)據(jù),即一個字節(jié)存放一個字符,這個文件就是ASCII文件(或稱字符文件)。

     2、二進制文件:文件中的信息不是字符數(shù)據(jù),而是字節(jié)中的二進制形式的信息,因此它又稱為字節(jié)文件

常用函數(shù)

打開文件:  

方式1:對文件輸出流、文件流對象,通過ofstream類的構(gòu)造函數(shù)打開文件

    格式: ofstream (磁盤文件名, 輸入輸出方式);     

    如果ofstream  為0(假),表示打開操作失敗

    如:   ofstream fout1(fname,ios::out);

    輸入輸出方式可以使用能夠進行組合使用的,以“或”運算(“|”)的方式,如:fstream fout(fname,ios::out|ios::in)

方式2:對文件的輸出和輸入流對象、文件流對象,都可通過open函數(shù)打開文件

    格式: 文件流對象.open(磁盤文件名, 輸入輸出方式);     

    返回值:為0(假),打開操作失敗

    如:   fout.open(fname,ios::out)      

關(guān)閉文件:

 在對已打開的磁盤文件的讀寫操作完成后,必須要關(guān)閉該文件  如:  outfile.close( );

文件操作

    1、可以用流插入運算符“<<”和流提取運算符“>>”輸入輸出標(biāo)準(zhǔn)類型的數(shù)據(jù)(>> 讀出時在遇空格、換行都結(jié)束)。

    2、也可以用文件流的put、get、geiline等成員函數(shù)進行字符的輸入輸出。

#include <iostream>
using namespace std;
#include "fstream"

int main()
{
 char fname[] = "d:/file1.txt";
 char buff[1024]= {0};
 /*********** 寫文件 *************/
 //方式1 輸出流ofstream對象調(diào)用fopen函數(shù)
 ofstream fout;
 fout.open(fname,ios::out);
 if(!fout)
 {
 cout<<"打開文件失敗"<<fname<<endl;
 }
 fout<< "hello world !"; //通過左移運算符寫入字符串
 fout.flush();
 fout.close();

 //方式2 調(diào)用輸出流ofstream對象的構(gòu)造函數(shù)
 ofstream fout1(fname,ios::out);
 if(!fout1)
 {
 cout<<"打開文件失敗"<<fname<<endl;
 }
 fout1.put('h'); //通過put函數(shù)寫入字符
 fout1.put('e');
 fout1.put('l');
 fout1.put('l');
 fout1.put('o');
 fout1.put('\n');
 fout1.flush();
 fout1.close();

 //文件流對象寫文件
 fstream file2(fname,ios::in|ios::out);
 file2<<"abdfd\n";
 file2<<"11111\n";
 file2.flush();
 file2.close();

 /*********** 讀文件 *************/
 //輸入流ifstream對象讀取文件內(nèi)容
 ifstream fin;
 fin.open(fname,ios::in);
 fin.getline(buff,1024); //通過getline函數(shù)讀取字符串
 cout<<buff<<endl; 
 fin.close();
 
 //文件流對象讀文件內(nèi)容
 fstream file1(fname,ios::in|ios::out);
 file1>>buff; //通過右移運算符讀出字符串
 file1.close();
 cout<<buff<<endl;


 system("pause");
 return 0;
}

二進制文件操作

    對二進制文件的讀寫主要用istream類的成員函數(shù)read和write來實現(xiàn)。這兩個成員函數(shù)的原型為

     istream& read(char *buffer,int len);

     ostream& write(const char * buffer,int len);

#include <iostream>
using namespace std;
#include <fstream>

class Teacher
{
public:
 Teacher()
 {

 }
 Teacher(int age,char name[20])
 {
 this->age = age;
 strcpy(this->name,name);
 }
 void prinfInfo()
 {
 cout<<"Teacher name:"<<this->name<<"  age:"<<this->age<<endl;
 }
private:
 int age;
 char name[20];
};

int main()
{
 Teacher t1(31,"xiaoming");
 Teacher t2(32,"xiaohong");
 Teacher t3(33,"xiaohua");
 Teacher t4(34,"xiaoxin");
 char fname[] = "d:/file2";
 fstream fs(fname,ios::binary|ios::out);
 if(!fs)
 {
 cout<<"文件打開失敗"<<endl;
 }
 fs.write((char *)&t1,sizeof(Teacher));
 fs.write((char *)&t2,sizeof(Teacher));
 fs.write((char *)&t3,sizeof(Teacher));
 fs.write((char *)&t4,sizeof(Teacher));
 fs.flush();
 fs.close();

 fstream fs2(fname,ios::binary|ios::in);
 if(!fs)
 {
 cout<<"文件打開失敗"<<endl;
 }
 Teacher tt;
 fs2.read((char *)&tt,sizeof(Teacher));
 tt.prinfInfo();
 fs2.read((char *)&tt,sizeof(Teacher));
 tt.prinfInfo();
 fs2.read((char *)&tt,sizeof(Teacher));
 tt.prinfInfo();
 fs2.read((char *)&tt,sizeof(Teacher));
 tt.prinfInfo();
 fs2.close();

 system("pause");
 return 0;
}

輸出:

Teacher name:xiaoming  age:31
Teacher name:xiaohong  age:32
Teacher name:xiaohua  age:33
Teacher name:xiaoxin  age:34

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C語言自定義類型的保姆級講解

    C語言自定義類型的保姆級講解

    這篇文章主要給大家介紹了關(guān)于C語言自定義類型的保姆級講解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • 解讀C++編程的相關(guān)文件操作

    解讀C++編程的相關(guān)文件操作

    這篇文章主要介紹了解讀C++編程的相關(guān)文件操作,是C++入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-09-09
  • C語言編程C++柔性數(shù)組結(jié)構(gòu)示例講解

    C語言編程C++柔性數(shù)組結(jié)構(gòu)示例講解

    這篇文章主要介紹了C語言編程系列中的柔性數(shù)組,文中含有詳細的示例代碼講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-09-09
  • C++線程安全容器stack和queue的使用詳細介紹

    C++線程安全容器stack和queue的使用詳細介紹

    stack是一種容器適配器,專門用在具有后進先出操作的上下文環(huán)境中,其刪除只能從容器的一端進行 元素的插入與提取操作;隊列是一種容器適配器,專門用于在FIFO上下文(先進先出)中操作,其中從容器一端插入元素,另一端提取元素
    2022-08-08
  • C語言中的多行輸入問題及說明

    C語言中的多行輸入問題及說明

    這篇文章主要介紹了C語言中的多行輸入問題及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • C語言 文件操作解析詳解及實例代碼

    C語言 文件操作解析詳解及實例代碼

    這篇文章主要介紹了C語言 文件操作解析詳解及實例代碼的相關(guān)資料,需要的朋友可以參考下
    2016-11-11
  • 深入理解:Java是類型安全的語言,而C++是非類型安全的語言

    深入理解:Java是類型安全的語言,而C++是非類型安全的語言

    本篇文章是對Java是類型安全的語言,而C++是非類型安全的語言進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06
  • C語言實現(xiàn)獲取文件MD5值

    C語言實現(xiàn)獲取文件MD5值

    MD5(Message?Digest?Algorithm?5)是一種常用的哈希函數(shù)算法,這篇文章主要介紹了C語言如何獲取文件MD5值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-08-08
  • C++設(shè)計模式之迭代器模式

    C++設(shè)計模式之迭代器模式

    這篇文章主要介紹了C++設(shè)計模式之迭代器模式,本文講解了什么是迭代器模式、迭代器模式的代碼實例等內(nèi)容,需要的朋友可以參考下
    2014-10-10
  • C語言字符函數(shù)中的isalnum()和iscntrl()你都知道嗎

    C語言字符函數(shù)中的isalnum()和iscntrl()你都知道嗎

    這篇文章主要為大家詳細介紹了C語言字符函數(shù)中的isalnum()和iscntrl(),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02

最新評論

孝昌县| 虞城县| 古丈县| 浮梁县| 肃南| 奇台县| 辽阳市| 襄樊市| 兴宁市| 四平市| 垦利县| 息烽县| 宁南县| 资中县| 宣恩县| 富裕县| 白山市| 霍城县| 三台县| 灵山县| 民权县| 五原县| 丁青县| 武城县| 台湾省| 平安县| 漠河县| 拉孜县| 邳州市| 乐都县| 辽源市| 璧山县| 武安市| 金乡县| 囊谦县| 穆棱市| 鸡西市| 会同县| 广宁县| 黔西| 吉木萨尔县|