如何防止从C保存的文件末尾出现额外的空白?
我有这个功能,它将每个学生的朋友保存在一个文本文件中。学生的名字保存在不同的文本文件中,代码运行良好,所以我没有包含它。然而,当我查看my friends.txt时,我注意到在文件的结尾下方有一个额外的“空白”。我如何删除这个如何防止从C保存的文件末尾出现额外的空白?,c,function,text-files,C,Function,Text Files,我有这个功能,它将每个学生的朋友保存在一个文本文件中。学生的名字保存在不同的文本文件中,代码运行良好,所以我没有包含它。然而,当我查看my friends.txt时,我注意到在文件的结尾下方有一个额外的“空白”。我如何删除这个 void save(student *h, student *t){ FILE *fp1; student *y = h->next; fp1 = fopen("friends.txt", "w"); while(y != t){ frien
void save(student *h, student *t){
FILE *fp1;
student *y = h->next;
fp1 = fopen("friends.txt", "w");
while(y != t){
friend *y1 = y->friendh->next;
if(y1 != y->friendt){
while(y1 != y->friendt->prev){
fprintf(fp1, "%s ", y1->friends);
y1 = y1->next;
}
if(y1 == y->friendt->prev){
fprintf(fp1, "%s\n", y1->friends);
}
}
y = y->next;
}
fclose(fp1);
}
您看到的空间可能是最后一行末尾的换行符 如果希望换行符被视为行之间的分隔符或终止符(因此最后一行也应该有一个换行符),那么这一切都可以归结为。在我看来,换行符最常用的用法是作为终止符,甚至有文本编辑器在找不到这样的换行符时会添加这样的换行符 例如,一个有效的C源文件,即使这意味着在某些编辑器中,它将显示为末尾有一个空行 如果您不喜欢换行符作为终止符,您可以稍微更改代码,以便在除第一行之外的每一行上预先添加换行符,而不是在末尾添加换行符:
void save(student *h, student *t){
int first = 1;
FILE *fp1;
student *y = h->next;
fp1 = fopen("friends.txt", "w");
while(y != t){
friend *y1 = y->friendh->next;
if (!first) fputc('\n', fp1); /* Start on a new line */
if(y1 != y->friendt){
while(y1 != y->friendt->prev){
fprintf(fp1, "%s ", y1->friends);
y1 = y1->next;
}
if(y1 == y->friendt->prev){
fprintf(fp1, "%s", y1->friends);
}
}
y = y->next;
first = 0;
}
fclose(fp1);
}