Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何防止从C保存的文件末尾出现额外的空白?_C_Function_Text Files - Fatal编程技术网

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

如何防止从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

我有这个功能,它将每个学生的朋友保存在一个文本文件中。学生的名字保存在不同的文本文件中,代码运行良好,所以我没有包含它。然而,当我查看my 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);

}

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

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

例如,一个有效的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);
}