我寫簡單的代碼在C中存儲的學生信息(卷號,姓名,課程,費用,部門)在一個文本文件student.txt - 代碼片段:C文件處理記錄搜索:最後一個記錄顯示兩次
FILE *fp;
fp=fopen("student.txt","r");
//Input details from user and ..
//store it in student.txt
fprintf(fp,"%d %s %s %d %s ",s.rollno,s.name,s.course,s.fee,s.dept);
我寫了下面的代碼來檢索和打印文件中的所有記錄,並檢索最後一個記錄TWICE!
while (!feof(fp))
{
fscanf(fp,"%d%s%s%d%s",&s.rollno,s.name,s.course,&s.fee,s.dept);
printf("%d %s %s %d %s\n",s.rollno,s.name,s.course,s.fee,s.dept);
}
//OUTPUT :
46 mustafa be 12000 cse
41 Sam BE 32000 CSE
42 Howard BE 25000 EE
44 Sheldon BE 25000 CSE
44 Sheldon BE 25000 CSE
爲什麼最後一個記錄(Sheldon ..)被從文件中讀取兩次(儘管它在文件中只寫了一次,我檢查過)。請幫助,真的卡住了。
哇!晶瑩剔透。 Thanx :) – Mustafa
在這裏只有2個疑問,我可以繼續滿意: 1.當文件指針位於文件末尾時,爲什麼feof()不正確?從技術上講,應該是最後一個字符後面沒有空格。 2. fscanf()實際返回什麼?與使用的格式說明符的數量有關? – Mustafa
@Mustafa:1 /因爲這就是標準所說的:-)當你試圖閱讀_too時,EOF是一個標記集。即使它被設置在文件結尾,這也不會有幫助,因爲fscanf可能會讓你處於最後的換行字符,不在文件結尾。掃描功能會跳過像'%d'這樣的主要空白。 2 /'fscanf'爲您提供成功轉換的項目數,因此5是理想的。 0意味着EOF或第一個東西不能用'%d'作爲數字解碼。 – paxdiablo