How to prevent the appearance of an extra white space at the end of a file that was saved from C?
我有这个功能,它在文本文件中保存每个学生的朋友。 学生的名字保存在不同的文本文件中,并且该代码的工作正常,所以我没有包含它。 但是,当我查看我的friends.txt时,我注意到文件末端下方有一个额外的"空白区域"。 我该如何删除?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | 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 ", y1->friends); } } y = y->next; } fclose(fp1); } |
你看到的空间可能是最后一行末尾的换行符。
如果你想将换行视为行或终结符之间的分隔符(所以最后一行也应该有换行符),这一切都归结为一切。 IMO最常用的换行符是终结符,甚至还有文本编辑器会在找不到时添加这样的换行符。
例如,一个有效的C源文件应该以换行符终止,即使这意味着在某些编辑器中它看起来像是在末尾有一个空行。
如果您不希望换行符成为终结符,您可以稍微更改代码,以便在最后添加换行符而不是在第一行之外的每行上添加换行符:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | 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(' ', 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); } |