對於c++只有更深,沒有淺嘗輒止
下面先來看c++的標準輸入輸出流
物件標準流
標頭檔案
#include
// #include // input stream輸入流
// #include // output stream輸出流
iostream庫定義了三個標準流物件
輸出主要由過載的左移操作符(<<)來完成,輸入主要由過載的右移操作符(>>)完成
標準檔案流
由於iostream庫不光支援物件的輸入輸出,同時也支援檔案流的輸入輸出
#include
// #include
// #include
可見前面的部落格:c++檔案操作大全
io_state 輸入/輸出的狀態標誌
c++中負責的輸入/輸出的系統包括了關於每乙個輸入/輸出操作的結果的記錄資訊。這些當前的狀態資訊被包含在io_state型別的物件中。io_state是乙個列舉型別(就像open_mode一樣),以下便是它包含的值
有兩種方法可以獲得輸入/輸出的狀態資訊:
一、rdstate()
#include
usingnamespace std;
intmain()
if(cin.
rdstate()
== ios_base::failbit)
system
("pause");
}
二、使用下面任何乙個函式來檢測相應的輸入/輸出狀態
#include
usingnamespace std;
intmain()
if(cin.
fail()
)system
("pause");
}
上面都是c++內建資料型別和檔案標準輸入輸出流的基本概念,接下來我們來看看對於內建資料型別的檔案標準輸入輸出流的三個物件的各種方法
首先來介紹一些輸入輸出流的基本常識
流和緩衝區
c++程式把輸入和輸出看做位元組流。輸入時,程式從輸入流中抽取位元組;輸出時,程式將位元組插入到輸出流中。通常,通過使用緩衝區可以更高效的處理輸入和輸出。
以輸出為例,輸出時,程式首先填滿緩衝區,然後把整塊資料傳輸給硬碟,並清空緩衝區。c++通常在使用者按下回車鍵時重新整理輸入緩衝區
進入正題
標準輸出流:cout
正常的cout方法我就不做概述了,直接看一些少見但可能涉及的ostream方法吧
cout的拼接:
ostream&
operator
<<
(int
);
該原型表明,operator()接收乙個int引數,函式返回乙個ostream的引用,這使得可以將輸出連線起來
std::cout <<
"hello wordld"
<< std::endl;
cout.put(arg); 此處輸出的arg必須是char型別,如果是int也會預設轉換成ascii碼
cout.
put(
"w")
;// 拼接輸出
cout.
put(
"w")
.put
("t"
);
cout.write():需要注意的是,該方法在遇到空字元並不會自動停止列印字元,而只是列印指定書目的字元,即使超出了字串的邊界!
// arg表示變數
// n表示輸出該變數的前幾個
cout.
write
(arg, n)
;
下面來介紹乙個小問題:
如果程式使用cout將位元組傳送給標準輸出,由於ostream類對cout物件的處理的輸出進行緩衝,所有輸出不會立即傳送到目標位址,而是被儲存在緩衝區中,直到緩衝區填滿,以重新整理新的資料。
但是,在螢幕輸出時,程式不必等待緩衝區被填滿,例如,將換行符傳送到緩衝區,將重新整理緩衝區
例如
cout <<
"enter a number:"
;float num;
cin >> num;
程式期待輸入這一事實,將導致他會立刻顯示cout訊息,即使輸出字串中沒有換行符。如果沒有這種特性,程式將等等輸入,而無法通過cout訊息來提示使用者
如果實現不能在所希望時重新整理輸出,可以使用兩個控制符中的乙個來強行進行重新整理。
標準輸入流:cin
不同版本的抽取運算子檢視輸入流的方法是相同的,他們跳過留空白(空格,換行符和製表符)
當輸入沒有滿足程式的期望的時候,加入輸入的是zsd,而不是-123z,此事後會返回0
例如
int
main()
cout <<
"last:"
<< input << endl;
cout <<
"sum"
<< endl;
return0;
}// 輸入
20010-50
-123z 60
由於輸入被緩衝,因此在通過鍵盤輸入的在使用者按下回車鍵之前,不會傳送給程式,然而,迴圈在字元z處停止了對輸入的處理,因此他不與任何一種浮點格式匹配,導致cin >> input的結果為false,因此while迴圈退出。
流狀態
設定狀態:clear()和setstate(),他們都重置狀態,但採取的方式不同。
單字元輸入:get(char&)
在使用char引數或沒有引數的情況下,get()方法讀取下乙個字元,即使該字元是空格、製表符或換行符。get(char& h)將輸入字元賦給其引數,而get(void)將輸入字元轉化成整型,並將其返回
char ch;
cin.
get(ch)
;ch = cin.
get(
);
字串輸入:getline()、get()和ignore()
char line[
300]
;cin.
get(line,20)
;// get()將在到達第19個字元或遇到換行符後停止將輸入讀取到陣列中
getline
(line,20)
;// getline將在到達第19個字元或遇到換行符後停止將輸入讀取到陣列中
// get和getline的差別在於get將換行符留在輸入流中,而getline抽取並丟棄輸入流中的換行符
cin.
ignore
(line,
'\n');
// line指的是讀取的最大字元數,\n是輸入分解符,讀取並丟棄接下來的255個字元並直到到達第乙個換行符
其他方法:peek()
返回輸入中的下乙個字元,但是不抽取輸入流中的字元,也就是說,他是的能夠檢視下乙個字元,假設要讀取輸入,直到遇到換行符或句號,則可以使用peek()檢視輸入流中的下乙個字元,以此來判斷是否要抽取
C C 輸入輸出流
istream中的類 如cin 提供了一些面向行的類成員函式 getline 和get 這兩個函式都讀取一行輸入,直到達到換行符。不同的是,getline 將丟棄換行符,而get 將換行符保留在輸入序列中。目錄 一 字串 i o 二 string類 i o 1.面向行的輸入 getline getl...
python 標準輸入輸出流
python 中有三種標準輸入輸出流 sys.stdin sys.stdout sys.error f open 1.txt r fileno方法可返回整數的底層實現使用請求從作業系統的i o操作的檔案描述符 可理解為是第幾個開啟的檔案 f.fileno 3 一般開啟的第乙個檔案是第三個,前3個 從...
c 標準輸入 輸出流
標準輸出流是流向標準輸出裝置 顯示器 的資料,標準輸入流是從標準輸入裝置 鍵盤 流向程式的資料。在標頭檔案iostream.h中定義了cin cout cerr clog 4個流物件,cin是輸入流,cout cerr clog是輸出流。一 四個流物件 cin 標準輸入流,其標準輸入裝置是鍵盤。co...