gpt4 book ai didi

c - 如何防止从 C 保存的文件末尾出现额外的空格?

转载 作者:行者123 更新时间:2023-11-30 17:47:21 25 4
gpt4 key购买 nike

我有这个功能,可以将每个学生的 friend 保存在文本文件中。学生的姓名保存在不同的文本文件中,并且代码工作正常,所以我没有包含它。然而,当我查看 Friends.txt 时,我注意到在文件末尾下方有一个额外的“空白”。我该如何删除它?

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);

}

最佳答案

您看到的空格可能是最后一行末尾的换行符。

如果您希望将换行符视为行之间的分隔符或终止符(因此最后一行也应该有换行符),那么这一切都归结为换行符。 IMO 换行符最常见的用途是作为终止符,甚至有文本编辑器会在找不到换行符时添加这样的换行符。

例如,有效的 C 源文件 should terminate with a newline character ,即使这意味着在某些编辑器中它看起来像末尾有一个空行。

如果您不喜欢换行符作为终止符,您可以稍微更改代码,这样您就可以在除第一行之外的每一行前面添加换行符,而不是在末尾附加换行符:

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);
}

关于c - 如何防止从 C 保存的文件末尾出现额外的空格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18943667/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com