Re: [問題] C的結構問題

看板C_and_CPP作者 (overhead)時間10年前 (2015/05/27 16:23), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/3 (看更多)
※ 引述《tarobear (塔落熊)》之銘言: : 開發平台(Platform): (Ex: VC++, GCC, Linux, ...) : C : 問題(Question): : 書本範例: 利用學生ID搜尋,找出學生的資料 : 餵入的資料(Input): : #include<stdio.h> : struct mydata : { : int id; : char name[12]; : int score; : }buffer; : int main(void) : { : FILE *fptr; : int idkey; : printf("Input ID to search"); : scanf("%d",&idkey); : fptr=fopen("c:\\c_prog\\abc.txt","r"); : if(fptr!=NULL) : { : while(!feof(fptr)&&(idkey!=buffer.id)) : { : fread(&buffer,sizeof(buffer),1,fptr) : if(buffer.id==idkey) : { : printf("Yes! You got it!\n"); : printf("Student's ID:%d\n",buffer.id); : printf("Student's NEME:%s\n",buffer.name); : printf("Student's score:%d\n",buffer.score); : } : } : } : ... : ...(以下省略 : } : 補充說明(Supplement): : 程式打得有點多, 主要是想問為何 buffer.id 就可以找到資料 : 而不需要像 buffer[1].id 這樣呢? 你的"buffer"可以看成是一個"struct mydata"的變數 既然你從頭到尾沒有把他宣告成array 又怎麼需要用[1]呢? 另個問題是關於fread的用法 https://msdn.microsoft.com/zh-tw/library/kt0etdcs.aspx 參考msdn The fread function reads up to count items of size bytes from the input stream and stores them in buffer. 意思是說,實際執行一次fread,是會讀第二跟第三個參數相乘的大小 以你的fread(&buffer,sizeof(buffer),1,fptr)為例 就是一次讀sizeof(buffer)*1=sizeof(buffer) 再來,msdn說 The file pointer associated with stream (if there is one) is increased by the number of bytes actually read. 意思是使用fread時,你丟進去的最後一個參數fptr會因為fread而往後移動 而移動的量就是你讀的數量,也就是剛剛的sizeof(buffer)*1 初學者使用function時要注意 哪些參數是給此function了解你的設定(function只讀不寫該參數) 哪些參數原本是一個空值,你宣告好後設定為參數,function可以把該值設定 成他想告訴你的值(function只寫不讀該參數) 有些就像這次的fptr一樣,function想知道內容,又會告訴你他操作後的結果 (function又讀又寫該參數) 參數要能被function改動,他必須至少是個指標,才能call by reference 所以非指標的參數,基本上就是function會讀但不寫的 但是這些參數到底怎麼用,是由設計那個function的前人所決定 我們這些使用者必須跟著他的思維放入&操作正確的參數 所以用function之前要上網看過描述 推薦你看msdn 他會附上_In_ _Out_ 來描述這件事 https://msdn.microsoft.com/zh-tw/library/jj159525.aspx 這件事是我初學程式語言時最迷惑的事情,分享給你 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.226.201.142 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1432743834.A.2CF.html
文章代碼(AID): #1LPU-QBF (C_and_CPP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
問題
1
8
完整討論串 (本文為第 2 之 3 篇):
問題
4
11
問題
1
8
文章代碼(AID): #1LPU-QBF (C_and_CPP)