[爆卦]Fgets 換行是什麼?優點缺點精華區懶人包

為什麼這篇Fgets 換行鄉民發文收入到精華區:因為在Fgets 換行這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者parkko (小草)看板C_and_CPP標題[問題] binary file讀寫問題時間Su...



新手想問一個簡單的問題...

上網查但都找不到我想要的



我的程式原本是用text file寫成

run起來是ok的也符合規格

但後來發現有多一條規定要用binary file方式讀寫> <

規格要求有五個項目

第一(主項目)、二(次項目)、三(名稱)都是字串且字串長度都很簡短

第四項是int 代表第五項的行數

而第五項是一段文字(代表此樣物品的簡介)

這五個項目我是用Linked list寫

而這隻程式的作用是將txt檔當作小小小小型資料庫使用

使用者可以查詢關鍵字

新增資料進入這樣

寫入程式片段

while(temp!=NULL){
fwrite(temp->recipe_type,sizeof(temp->recipe_type),1,file1);
fwrite(temp->subtype,sizeof(temp->subtype),1,file1);
fwrite(temp->name,sizeof(temp->name),1,file1);
fwrite(&temp->file_line,sizeof(int),1,file1);
fwrite(temp->recipe,sizeof(temp->recipe),1,file1);
temp=temp->next;
}


讀取程式片段

fread(new_recipe->recipe_type,sizeof(new_recipe->recipe_type),1,file1);
fread(new_recipe->subtype,sizeof(new_recipe->subtype),1,file1);
while(1){
ch=fgetc(file1);
new_recipe->name[count]=ch;
if(ch=='\n'){
break;
}
count++;
}

new_recipe->name[count]='\0';
fread(&new_recipe->file_line,sizeof(int),1,file1);
do{
ch=fgetc(file1);
if(ch=='\n'){
line_counter++;
}
new_recipe->recipe[counter]=ch;
counter++;

}while(line_counter!=(new_recipe->file_line));



而我目前遇到的問題是

如果不是用text file 那該如何辨識換行?

我有上網查但看不太懂ˊˋ

還有第三項規定要自成一行,但我用fwread寫出來是全部連在一行

有方法讓fwrite寫入換行嗎?

還有想問fprintf fscanf fgetc fgets都無法使用在binary file上面嗎?

第一次要用binary file完全摸不著頭緒阿:(

謝謝



※ 編輯: parkko 來自: 114.35.167.242 (06/17 16:14)
EdisonX:fprintf fscanf fgetc fgets 只有 fgetc 勉強可用,其它否. 06/17 16:39
EdisonX:另外寫入 binary 時,通常不會再用換行、空白。 06/17 16:40
parkko:那麼我想請問在第五項該如何判別文章內容的結束點? 06/17 16:42
parkko:先謝謝你的回答^^ 06/17 16:42
EdisonX:我不確定其他人作法,我所知做法大致是 (1) 做結束字串 06/17 16:46
EdisonX:(2) 開頭就寫入有幾筆資料 (3) 格式固定的話就用算的. 06/17 16:46
EdisonX:binary file 格式由coder定,所以怎麼判斷結束也是由coder 06/17 16:47
EdisonX:定義,由 fread 傳回值判斷個人認為很不恰當就是了。 06/17 16:47
EdisonX:一種寫法 : http://codepad.org/GmgFDFZJ 06/17 17:05
linotwo:用 fwrite 寫入換行,根據 OS 不同有不同做法 06/17 20:34
linotwo:Windows : fwrite((void *)"\r\n", 1, 2, fp); 06/17 20:34
linotwo:Unix : fwrite((void *)"\n", 1, 1, fp); 06/17 20:35
linotwo:Mac : fwrite((void *)"\r", 1, 1, fp); 06/17 20:35
parkko:謝謝 我的問題已解決^^ 06/17 20:53

你可能也想看看

搜尋相關網站