摘要大家常用到的一些C/C++ 讀取檔案程式碼,大多的長相如下: while ( !infile.eof() ){ // 讀檔 … // 資料處理 …} 然而,這樣寫可能會造成錯誤!因為C/C++ 的feof() 或是eof()的運作方式,是當上一個檔案讀取到結尾時,才回傳true,並非該次讀取到EOF才回傳true。也就是說,此一方法可能會造成當次讀取到EOF時,直接通過while迴圈,造成程式錯誤! 詳細解說請至〔教學〕C 及 C++ 常犯錯誤 – EOF 測試的錯誤用法
Author: Allen
[C/C++] 陣列當作參數傳遞的函式實做方法
在網路上無意間看到(原創) 如何使用function template傳遞array? (C/C++) (template)的幾篇文章後,我翻開我那塵封已久的C++ Primer 4/e,將有關陣列當做參數傳遞到函數的實作方法,整個初階到較為高階的做法,整理過後如下:一般來說,我們若要讓函數傳遞陣列時,會寫以下: 但是此函式主要有兩個問題:1. 若傳入的陣列只有包含3個元素時,會有out of range的問題。2. 若傳入的陣列長度超過10,則無法完整印出該陣列內容。針對上述問題的解法,C++ 在訂出reference這個概念後,array也可以用以下來代替: 此一reference的技巧,在於限定傳入的陣列大小只有10,降低了使用上的風險。其中,傳入的參數int (&arr)[10] 表示傳入一個reference,其reference到具有10個int元素的陣列。若不加入括號的話:int &arr[10]表示傳入一個長度為10的陣列,每一個元素型態皆為int &。不過,如此作法卻大大降低了可用性。 因此,如何管理好陣列大小,便成為一個令人頭痛的問題!根據C/C++ Primer 4/e 提出常用的解法有三:1. 函式另外傳入兩個指標,分別指向陣列開頭以及陣列結尾。2. 如1.所述,不同的是,將原本指到陣列結尾的指標轉而指向陣列結尾的下一個。3. 函式須指明給定陣列的明確長度。但是,此方法在實用性上略顯不足,難道沒有一個更有效的方法嗎? 我們可以利用C++的template來幫我們實現這個方案。 上述程式碼,利用樣板特化的技巧,讓函式不用帶入陣列大小,便可透過樣板參數幫我們自動得知陣列大小,以利函式功能的撰寫。因此,舉一反三,我們可以藉此程式碼推廣至二維陣列,範例程式碼如下: 因此,對於陣列的參數傳遞,我們可以利用樣板的功能來幫我順利達成。似乎一切在這邊有了完整的解答。:)Reference C++ Primer 中文版 4/e page. 110 , 240~241, 632~633.(原創) array傳進function該怎麼寫才好? (C/C++) (C) 推薦閱讀!
「電子書產業」還有什麼可為的?
台灣一年可以出版四萬種書,而現在沒有任何一家電子書平台能夠宣稱線上擁有超過一萬種的可下載書目。我們連韓國的八分之一都不如,這樣要指望電子書產業興盛,也真是太強人所難了。 事實擺在眼前,只有硬體不可能造就電書產業… 若需知詳情,請至:http://www.contnt.net/2010/12/ebook-industry-what-can-we-do.html
Read file , and count the IDs.
I’ve forgot the useage of fstream.getline function. #include <iostream>#include <fstream>#include <stdio.h>using namespace std;int main(int argc,char * argv[]){ fstream MyFileStream; char ReadInput[1024]; int IdMax= -1 , Counts = 0; MyFileStream.open(“Book_data.prn”,ios_base::in); while(!MyFileStream.eof() && MyFileStream.getline(ReadInput,1024)) { int ReadId=atoi((strtok(ReadInput,” “))); if(IdMax < ReadId) { cout << “ID:” << ReadId << endl; ++Counts; IdMax = ReadId; } } cout << […]
冒痘痘的位置可能顯示出身體的警訊
臉上是否常常長痘痘?這代表妳/你 的身體代謝可能出了些問題… 額頭﹕脾、胃出現問題﹔眉心﹕心火旺﹐心包括心臟和大腦﹐意指過于勞心傷神﹔鼻樑和鼻頭﹕脾有問題﹔鼻兩側﹕胃火大﹐消化系統異常﹔左邊臉頰﹕肝功能不順暢﹔右邊臉頰﹕肺功能失常﹔左右腮﹕胰部出現問題﹔下巴﹕腎功能受損或內分泌失調。 想知道更詳細情況,請至 http://tw.myblog.yahoo.com/jw!eRN1fU.QHALGaK0ojRax1gU-/article?mid=837&prev=838&l=f&fid=8
分享健康=分享愛
Dear all: 讓我幫我的女友打個小廣告一下。她最近使用賀寶芙的產品 瘦身有成 (我親眼見證) ,所以想跟大家share一下好康。 她為此架設了一個網站,對於想要減肥或是增胖的人,請洽詢: 賀寶芙資訊網-草本之家
[C++/GUI]wxWidgets and wxPack
wxWidgets 是一個跨平台的GUI library,如果要利用Code::Blocks + wxWidgets 寫視窗程式的話,小弟就來獻醜一下,如何正確安裝wxWidgets + Code::Blocks。 環境: IDE: Code::Blocks ver. 10 Compiler: MinGW Platform: Windows XP
Useful PHP MVC Framework:CodeIgniter
最近在看wu-boy大大的部落格,發現一套好用的PHP MVC Framwork: CodeIgniter。它主要的優點有: 開發快速 效能卓越 不需使用Command-line 不需要學到像PEAR那樣包山包海的Codes 您可以到官方網站下載。 想要看中文文件教學的可以到以下: CodeIgniter 1.7.2 使用手冊(繁體中文) Wu-boy的CodeIgniter教學範例與心得 Introduction to CodeIgniter PHP MVC Framework
Dia 0.97 輸入中文的方法
Visio的替代軟體:Dia (現為0.97 version) 在Windows 環境下安裝完畢後,發現輸入的方塊或標籤卻不能顯示中文,那該如何是好呢? 其實很簡單,只要在功能表裏選擇輸入法->簡單,就可以了,不能用默認的 系統(Windows IME)。 Ref: http://azo-freeware.blogspot.com/2006/10/dia-095-1.html
雲端運算的MapReduce
其實這個標題算下得不太好!應該是講說雲端系統 Hadoop的MapReduce。 有興趣的讀者可以看一看以下文章: MapReduce,Hadoop 初探Hadoop開放原始碼平台環境