我正在製作一個小型的基於控制檯的RPG,來刷新我的編程技巧。 我正在使用結構來存儲字符數據。事情就像他們的HP,力量,也許庫存在路上。我需要做的關鍵事情之一是加載和保存字符。這意味着閱讀和保存結構。爲什麼我的程序讀取額外的結構?
現在我只是保存和加載一個名字和姓氏的結構,並試圖正確閱讀它。
這裏是我創造一個字符代碼:
void createCharacter()
{
char namebuf[20];
printf("First Name:");
if (NULL != fgets(namebuf, 20, stdin))
{
char *nlptr = strchr(namebuf, '\n');
if (nlptr) *nlptr = '\0';
}
strcpy(party[nMember].fname,namebuf);
printf("Last Name:");
if (NULL != fgets(namebuf, 20, stdin))
{
char *nlptr = strchr(namebuf, '\n');
if (nlptr) *nlptr = '\0';
}
strcpy(party[nMember].lname,namebuf);
/*Character created, now save */
saveCharacter(party[nMember]);
printf("\n\n");
loadCharacter();
}
這裏是saveCharacter功能:
void saveCharacter(character party)
{
FILE *fp;
fp = fopen("data","a");
fwrite(&party,sizeof(party),1,fp);
fclose(fp);
}
和loadCharacter功能
void loadCharacter()
{
FILE *fp;
character tempParty[50];
int loop = 0;
int count = 1;
int read = 2;
fp= fopen("data","r");
while(read != 0)
{
read=fread(&tempParty[loop],sizeof(tempParty[loop]),1,fp);
printf("%d. %s %s\n",count,tempParty[loop].fname,tempParty[loop].lname);
loop++;
count++;
}
fclose(fp);
}
這樣的預期效果該程序是我輸入姓名和姓氏,如'John Doe',並將其附加到數據文件。然後它被讀入,可能類似於
1. Jane Doe
2. John Doe
並且程序結束。
但是,我的輸出似乎在最後增加了一個空白結構。
1. Jane Doe
2. John Doe
3.
我想知道這是爲什麼。請記住,我正在讀取文件,直到fread返回0來表示它碰到EOF。
謝謝:)
對於後人,我結束了持續的解決方案是,以保持我的代碼相同,與小添加嵌套的,如果同時裏面,檢查讀取在它到達printf之前。 – Blackbinary 2010-08-04 15:09:39