發表文章

目前顯示的是 九月, 2014的文章

善用 C++ istream 的 eof() 和 fail()

當函式需要讀入資料做處理時, 讓函式接收一個 std::istream* 會比直接呼叫 std::cin 好一些, 必要時可以改傳 std::istringstream 提供更多彈性, 比方說方便作測試。不過實測的結果, std::cin 和 std::istringstream 的行為略有不同。std::cin 讀到 EOF 後, 呼叫 eof() 才會回傳 true, 但是 std::istringstream 在讀完最後一個 byte 後, eof() 就回傳 true 了。以下是一個小範例, 可以正確處理兩者, 關鍵是讀完資料後用 fail() 檢查剛才的輸入是否有效。 #include <iostream> #include <sstream> void foo(std::istream* s) { int n; while (!s->eof()) { *s >> n; if (!s->fail()) { std::cout << n << std::endl; } } } int main(void) { std::istringstream ss("1 2 3 4 5"); foo(&ss); foo(&std::cin); return 0; } 另外附上別人截錄的官方說明。

備忘 Mac OS X 下的一些設定

加減寫下一些設定, 備忘在這篇裡。那天買新的 Mac 裝置時, 才知道要做那些設定iTerm2 ssh除 preference -> terminal 要設 UTF-8外,/etc/ssh_config 也要加上 SendEnv LANG LC_ALL=en.US.UTF-8參考資料: iterm2 ssh和openssh客户端中文乱码的解决方案 | 线筝