C 學習筆記 day13

2021-06-23 07:11:11 字數 3726 閱讀 2571

1、資料  記憶體中  變數

磁碟上  檔案

2、把資料從其他的裝置搬到記憶體中 --- 輸入 --- 讀

把記憶體中的資料放到其他裝置中 --- 輸出 --- 寫

3、流物質的定向移動,輸入輸出流中是資料的定向移動

輸入流的源頭: 檔案      目的地:記憶體

輸出流的源頭: 記憶體      目的地:檔案

4、標準輸出裝置 --- 顯示器

標準輸入裝置 --- 鍵盤

鍵盤 --- 記憶體 --- 顯示器

|        |

輸入操作   輸出操作           

輸入輸出流: 記憶體與磁碟之間,記憶體與標準輸入輸出裝置之間的

5、cout  源 :變數      目的地 :顯示器 

cin        鍵盤               記憶體中某一變數

6、標準輸入流 cin   istream的乙個物件

標準輸出流 cout  ostream的乙個物件

標準錯誤流 cerr 目的地都是螢幕,用cout替代

7、cin

是乙個帶有緩衝的標準的輸入物件,預設輸入裝置是鍵盤

(1) >>  : 自動校驗資料型別  

遇到回車才會開始讀資料,遇到空格就結束,只能讀乙個單詞

流是資料的定向移動,被讀走的資料就消失,沒有讀走的資料會一直留在流中,直到流的消失,資料也跟著消失

流中有資料,就會阻塞,等待讀取  ---  所有輸入方法的特性

為什麼">>"可以連續使用?因為返回就是istream物件本身的引用

注意 :">>" 不讀回車,不讀空格

(2)get(): 每次讀乙個字元。返回乙個整數,實際上是讀到字元的ascii碼

把回車,空格都當作普通字元讀出來

(3)get(char&):把讀到的內容存到引數中               

cin.get(arr[0]).get(arr[1]);  //get(char&)返回cin本身,可以連續使用

(4)getline(str,256) : 讀取一行,包括空格

對於回車,唯讀走,不儲存

會讀取陣列長度減1個字元,最後乙個放'\0'

輸入資料超過給定的空間(1)截斷資料,剩下的資料還在流裡

(2)設定乙個錯誤標記,呼叫cin.clear(),清除錯誤,繼續工作

#include

using namespace std;

int main(){

int age;

char name[20] ;

cout << "enter your age>";

cin >> age;

cin.get();            //讀取流中殘餘的回車,以便getline能正常工作

// cin.ignore(20,'\n');  //忽略20個字元或者碰到回車,從流中清除

cout << "enter your name >";

cin.getline(name,20);

cout << "your age is :" << age << endl;

cout << "your name is :" << name << endl;

(5)read(char*,int)  char*是存結果的位址,int是讀的長度,並且不能比前面的陣列的空間大

讀滿為止 ,特殊字元也當做普通字元處理

超出的部分仍然存在流裡面

只要資料沒讀滿,一直阻塞

不會自動補'\0' --- 傳引數的時候,陣列長度傳減1的長度,補齊'\0'以免亂碼

所有輸入流的共同特徵:只要沒資料就阻塞

讀不完的就留在流裡                                        

(6)cin.ignore(255,'\n')  忽略255個字元或者遇到'\n',如果在前255個字元中出現'\n',則就忽略到'\n'之前的字元                        

(7)peek()  檢視流裡的第乙個字元是什麼

只察看,不讀走

(8)putback() 向流中插入字元,前提必須有空位的時候

必須與get()一起使用,用get()取出乙個字元,才能用putback()插入乙個字元

(9)cin.fail()判斷是否出現錯誤標誌,一切正常返回false

當用cin讀取的資料型別出現錯誤的時候,這是一種不可恢復的錯誤,用cin.clear()是不能清除錯誤標記的

在鍵盤上讀取,用getline()可以確保輸入流的正常形成,讀取後採取強制轉換型別得到自己需要的資料

8、ifstream

(1)需要#include 標頭檔案

ifstream ifs("test.txt");  //建立乙個ifstream的物件,開啟檔案,給建構函式傳如乙個引數,就是文要開啟的檔名 

//檔案的在當前目錄下找,也可以用相對路徑或絕對路徑找檔案

在開啟檔案之後,立即判斷開啟檔案是否成功

if( ifs.fail() ){

cout << "can't open test " if( ! ifs ){    //也可以這樣判斷檔案開啟是否出錯

cout << "can't open test " (2)在檔案結束的時候都會有"eof"標誌,作為檔案結束的標誌符

可以用判斷是否讀到"eof",來判斷時候讀到檔案尾了

if(ifs.eof()){

break;

(3)對於乙個程序可開啟檔案的數量是有數的,所以檔案屬於資源

所以在使用完畢以後,要關閉檔案輸入流     

練習:(1)把/etc/passwd 檔案列印出來

(2)把檔案中不以"#"開頭的內容讀出來

peek(),ignore()

9、輸出操作cout

(1) << 操作被輸出到螢幕上的東西,只所以能輸出,都是以字串型別輸出

也就是說這個操作有自動型別轉換的功能

(2)put()   返回cout引用,可以連續呼叫           

(3)write(buf,len)  按指定長度寫到螢幕上 buf是char*型別

(4)cout.width(10); 列印的內容總共佔10個字元,並靠右對齊

只對其後邊的乙個cout生效

(5)cout.fill('#'); 用'#'補齊空位

主要呼叫一次,對以後的都生效      

(6)setf()操作,控制格式,教材188頁                                        

(7)特殊字元

'\r'  表示回退乙個格,再輸出

'\n'  回車

\\    輸出乙個'\',因為'\'會被認為是轉義字元

'\t'  乙個tab鍵

(8)輸出控制符

oct    按八進位制輸出 「0」

dec    使進製輸出

hex    按十六進製制輸出 「0x」

flush  清空緩衝區 帶緩衝區是因為和外部裝置交涉,這樣能減少向螢幕輸出的次數,提高效率

回車、程式結束和flush都是重新整理快取的命令

cout << "a" <10、ofstream

開啟檔案,把資料寫進檔案,關閉檔案

ofstream ofs("ofstream.txt");  //開啟檔案,若檔案不存在,建立,存在,開啟

if(ofs.fail()){                 //寫檔案失敗,一般是許可權問題

cout << "open file error "

DAY13學習筆記

疊加多個裝飾器 當乙個被裝飾的物件同時疊加多個裝飾器時 裝飾器的載入順序是 自下而上。迭代器 什麼是迭代器 迭代指的是乙個重複的過程,每一次重複都是基於上一次的結果而來的。迭代器指的是迭代取值的工具,該工具的特點是可以不依賴於索引取值。為何要用迭代器 為了找出一種通用的 可以不依賴於索引的迭代取值方...

力扣學習筆記day13

編寫乙個程式,找到兩個單鏈表相交的起始節點。如下面的兩個鍊錶 在節點 c1 開始相交 輸入 intersectval 8,lista 4,1,8,4,5 listb 5,0,1,8,4,5 skipa 2,skipb 3 輸出 reference of the node with value 8 輸...

前端學習Day13

一.如果考慮相容最小高度的設定 了解 1.正常專案中 最小高度直接用min height即可。如果考慮相容 min height 在ie6不相容,ie6預設把height解析成最小高度。注 如果height 和 min height同是出現,執行height固定高度。2.最小高度的相容設定方法 了解...