程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 第8章 標准IO庫

第8章 標准IO庫

編輯:關於C語言

 

1、先介紹幾個常用函數

1)、getline(istream is,string s)將輸入流is中讀取到的字符一直遇到\n結束,或文件結尾或讀取錯誤)放到字符串s中。就相當於讀取一行的字符到s中。

2)、getline(istream is, string s, char c) 將輸入流is中讀取字符一直遇到c結束,或文件結尾或讀取錯誤)放到字符串s中。

如: getline(cin,str,'#')

3)、getchar() 相當於getc(stdin)從輸入流中讀取一個字符

4)、cin.getline(char *cha, int num, char f)

從標准輸入流cin中讀取num個字符或者遇到結束字符f,char f默認以\n結束。將讀取的字符存放到cha中

如:char cha[10]; cin.getline(cha,5,'*'); cout<<cha<<endl;

5)、string s; cin>>s;從標准輸入流中讀取一個字符串放到s中。

 

2、面向對象的標准庫

IO類型:標准輸入輸出窗口,讀寫文件,內存中的字符串。

IO對象不可復制和賦值,因此作為函數的參數或返回值時必須加上引用符號。

1)標准輸入輸出   頭文件 <iostream>

標准輸入流:istream 類標准庫中的對象 cin

標准輸出流:ostream 類標准庫中的對象 cout

標准輸入輸出流:iostream類多重繼承於istream類和ostream類。

 

3、條件狀態

s.eof()s.fail()s.bad()s.good()s.clear()s.clear(flag)s.setstate(flag)s.rdstate()

flag:strm::iostatestrm::badbitstrm::failbitstrm::eofbit

如: while(cin.eof())如 ifstream::iostate infile_state = ifstream::badbit;

s.clear(eofbit)

刷新緩沖區的方式

1、

1)cout<<"hi"<<endl; 附加操作換行

2)cout<<"hi"<<flush; 沒有任何附加操作

3)cout<<"hi"<<ends附加操作插入空字符null

2、unitbuf操縱符

cout<<unitbuf<<"first"<<"second"<<nounitbuf;

等價於

cout<<"first"<<flush<<"second"<<flush;

nounitbuf將操作流恢復為正常的,由系統管理的緩沖區刷新方式。

 

4、文件的輸入輸出頭文件 <fstream>

ifstream: 由istream派生,提供讀文件的功能。

ofstream:由ostream派生,提供寫文件的功能。

fstream:由iostream派生,提供讀寫同一個文件的功能。

同時定義了自己的兩個操作 open 和 close

ifstream infile(ifile.c_str())//實參必須為c風格字符串,創建寫對象時綁定文件

ifstream infile; infile.open(ifile.c_str())//後面綁定。可實現文件流的重新綁定,一個文件流重新綁定另一個文件之前,需先關閉當前綁定的文件

ifstream infile("in");

infile.close();

infile.open("next");

清除文件流常用操作:

in.close(); in.clear();

清除輸入緩沖區常用操作:

in.ignore(200,' ');跳過輸入流中的200個字符或遇到結束符空格結束

in.ignore() 默認跳過1個字符。

文件模式:

in : 打開文件讀操作

out :打開文件寫操作

app :在每次寫之前找到文件尾

ate :打開文件後立即將文件定位到文件尾

trunc :打開文件後清除文件所有內容

binary:以二進制方式打開文件

out ,trunc, app 用於ofstream ,fstream關聯的文件。

in只能用於ifstream,fstream關聯的文件

ate binary可用於所有文件。

 

5、字符串流頭文件<sstream>

iostream標准庫支持內存中的輸入\輸出。只要將流與存在程序內存中的string對象捆綁起來即可

istringstream:由 istream派生而來,提供讀string的功能。

ostringstream:由ostream派生而來,提供寫string的功能。

stringstream:由iostream派生而來,提供讀寫功能。

常用操作:

stringstream strm;//創建自由的stringstream對象。

stringstream strm(s); //創建存儲s的副本的stringstream對象,其中s為string類型的對象

strm.str();// 返回strm中存儲的string類型對象。

strm.str(s);// 將string類型的s復制給strm,返回void

常用方式:

1)讀取文件中的每一個單詞

string line,word;

while(getline(cin,line))//讀取文件中的一行字符存放到line中

istringstream stream(line);//用line中的字符串初始化字符串流stream

while(stream>>word)//依次讀取字符串流中各個字符串

//do sth

}

(2) 格式轉換

cin cout 相當於C中的scanf printf格式化輸入輸出

int i; cin>>i ;根據整型i,從輸入流cin中讀取一個整型數據

int val1 = 512,val2= 1024;

ostringstream format_message;

format_message<<"val1: "<<val1<<"\n"

<<"val2: "<<val2<<"\n";

相當於將字符串val1: 512\n val2: 1024存儲到了字符串中是兩行)

然後可以根據一定的形式讀取對應的整數值。

istringstream input_istring(format_message.str());

string dump;

input_istring<<dump<<val1<<dump<val2;

cout<<val1<<val2;//只是為了從輸入流中提取整數值 512 和1024 ,dump只是輔助作用,去掉相應的字符串。

根據變量類型將輸入流input_istring中的數據賦給相應的變量。

 

 

本文出自 “李海川” 博客,請務必保留此出處http://lihaichuan.blog.51cto.com/498079/1290428

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved