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

标签 c function text-files

我有这个功能,可以将每个学生的 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/

相关文章:

c++ - 如何在 Mongoose 中接收发送的数据?

c - while 循环中出现段错误。 Valgrind 没有发现错误

java - 如何在java中读取文本文件到不同对象类型的ArrayList?

c++ - 如何在 C++ 中读取复杂的文本文件?

CSV 与 TXT 文件中的 Java BufferedReader 行为

C编程 : Does Modulus Ignore Leading Zeros in Result ? 如何停止?

c - 当我从此代码中删除 scanf 行时,我得到正确的输出为 "hello"但是在使用 scanf 时我得到的输出为 "bye".... 为什么这样?

c - 如何在C中将多个函数分组以折叠

javascript - 为什么函数返回 bool 值?

c++ - 如何找到传递给函数的矩阵的大小?