iostream輸入輸出流互相繫結問題

2021-06-23 09:45:35 字數 1095 閱讀 2437

先看如下**

int main(int argc, char const *argv)

}

當輸入a空格符b空格符c空格符d空格符e 

輸出的是:ab

cd當依次輸入a、b、c、d、e的時候,

結果仍然是:ab

cd原因如下:

*out_iter++ = *in_iter++;

這句的問題。

你要知道每次的讀取動作發生在什麼時候。

第一次 判斷 in_iter != eof 時讀取了 "a" ,然後在

*out_iter++ = *in_iter++;

這句完成了兩件事,一是把 "a" 寫到 out_iter,二是在 in_iter++ 的時候將 "b" 讀入。

再次判斷 in_iter != eof 時因為此時 in_iter 已經指向 "b" 了,所以不用再次讀入;然後再執行到

*out_iter++ = *in_iter++;

這句把 "b" 輸出到 out_iter 同時由 in_iter++ 的操作將 "c" 讀入。

...然後當 in_iter 指向 "e" 而再次執行到

*out_iter++ = *in_iter++;

這句的時候,因為將 "e" 傳給 out_iter 和 in_iter++ (讀入下乙個字串)這兩個操作在同乙個表示式中完成,所以只有輸入下乙個字串後此表示式才能順利完成動作,而此時由於正等待新的輸入,所以執行實際上停在

*out_iter++ = *in_iter++; 這句話上了,也就看不到將 "f" 傳給 out_iter 的執行結果。

要想看到所要的結果,只需將

*out_iter++ = *in_iter++;

這句拆成兩句,明確執行順序即可:

*out_iter++ = *in_iter;

in_iter++;

這樣明確先輸出再讀入,就不會出現上面的情況。

實際在處理檔案時由於能夠判斷檔案結尾,不存在等待

*out_iter++ = *in_iter++;

這句執行完的情況,所以 "e" 是可以正常輸出的,上面的問題只會出現在命令列輸入的情況下。

iostream輸入輸出流 cin cout

cin是istream類的物件,即c 的標準輸入流物件。主要用於從鍵盤等輸入裝置上讀取資料。其常用的讀取資料流的方法有 cin cin.get cin.getline 1 cin 方式 1 該方式每次讀取資料流時,一旦遇到空格 換行符,則其後的內容都被捨棄無法讀取。只能讀取這些分隔符之前的內容。且首...

C 中的iostream輸入輸出

include include 是個包含命令,就是把iostream這個檔案裡的內容複製到這個地方。iostream是input output stream的簡寫,意思為標準的輸入輸出流標頭檔案。它包含 1 cin 要輸入的內容 2 cout 要輸出的內容 這兩個輸入輸出的方法需要 include來...

輸入輸出流

c 通過以下幾個類支援檔案的輸入和輸出 ofstream寫操作的檔案類由ostream引申而來 ifstream讀操作的檔案類由istream引申而來 fstream可同時讀寫操作的檔案類由iostream引申而來 ifstream in tian.txt 開啟乙個檔案 ifstream in in...