84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
光阴似箭催人老,日月如移越少年。
1.當ctrl Z單獨成行,或說它前面沒有任何字元(包括空格)時表示終止,其他情況他會被識別為一個無意義的字元。 windows下的定義,和程式無關。
2.endl是刷新流。由於cin是遇到錯誤跳出的while循環,所以不用cin.clear()刷新狀態位元也是沒辦法重新進入輸入的。你第二個程式會輸出原來輸入的字母,不是因為資料還在流裡面,而是因為運行完第一個while,輸入資料被保存在了全域物件p2中,同時由於沒有重置狀態,程式直接跳過了第二個while循環,直接輸出了p2的內容
解:兩個while循環間加入cin.clear()和cin.sync()(不想換行輸入ctrl+z還可以加個cin.ignore())
linxu :透過Ctrl+D設定EOF即可
Ctrl+D
EOF
windows 透過Ctrl+Z 設定EOF即可
Ctrl+Z
程式碼中加入cin.clear()
#include <iostream> #include <string> using namespace std; int main(){ string p1, p2; cout << "first" << endl; while (cin >> p1){// p2 += p1; } cout << p2 << endl; cin.clear();//重新清空一下流的标志位,包括EOF cout << '\n' <<"second" <<endl; while (cin >> p1){ p2 += p1; } cout << p2 << endl; return 0; }
Linux中,在新的一行的開頭,按下Ctrl-D,就代表EOF(如果在一行的中間按下Ctrl-D,則表示輸出"標準輸入"的緩存區,所以這時必須按兩次Ctrl-D); Windows中,Ctrl-Z表示EOF。 (順便提一句,Linux中按下Ctrl-Z,表示將該進程中斷,在後台掛起,用fg命令可以重新切回到前台;按下Ctrl-C表示終止該進程。) 那麼,如果真的想輸入Ctrl-D怎麼辦?這時必須先按下Ctrl-V,然後就可以輸入Ctrl-D,系統就不會認為這是EOF訊號。 Ctrl-V表示以"字面意義"解讀下一個輸入,如果想按"字面意義"輸入Ctrl-V,連續輸入兩次就行了。 引用自 阮老師的 EOF 是什麼?
Linux中,在新的一行的開頭,按下Ctrl-D,就代表EOF(如果在一行的中間按下Ctrl-D,則表示輸出"標準輸入"的緩存區,所以這時必須按兩次Ctrl-D);
Windows中,Ctrl-Z表示EOF。 (順便提一句,Linux中按下Ctrl-Z,表示將該進程中斷,在後台掛起,用fg命令可以重新切回到前台;按下Ctrl-C表示終止該進程。)
Ctrl-Z
那麼,如果真的想輸入Ctrl-D怎麼辦?這時必須先按下Ctrl-V,然後就可以輸入Ctrl-D,系統就不會認為這是EOF訊號。 Ctrl-V表示以"字面意義"解讀下一個輸入,如果想按"字面意義"輸入Ctrl-V,連續輸入兩次就行了。
引用自 阮老師的 EOF 是什麼?
1.當ctrl Z單獨成行,或說它前面沒有任何字元(包括空格)時表示終止,其他情況他會被識別為一個無意義的字元。 windows下的定義,和程式無關。
2.endl是刷新流。由於cin是遇到錯誤跳出的while循環,所以不用cin.clear()刷新狀態位元也是沒辦法重新進入輸入的。你第二個程式會輸出原來輸入的字母,不是因為資料還在流裡面,而是因為運行完第一個while,輸入資料被保存在了全域物件p2中,同時由於沒有重置狀態,程式直接跳過了第二個while循環,直接輸出了p2的內容
解:兩個while循環間加入cin.clear()和cin.sync()(不想換行輸入ctrl+z還可以加個cin.ignore())
linxu :透過
Ctrl+D
設定EOF
即可windows 透過
Ctrl+Z
設定EOF
即可程式碼中加入cin.clear()
EOF的輸入