先看如下**
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...