我有此功能,可以将每个学生的朋友保存在文本文件中。学生的名字被保存在不同的文本文件中,并且代码工作正常,所以我没有包括它。但是,当我查看我的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/

10-08 20:29
查看更多