0

各生徒の友達をテキストファイルに保存するこの機能があります。学生の名前は別のテキスト ファイルに保存されており、そのコードは正常に機能しているため、含めませんでした。しかし、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);

}
4

1 に答える 1

0

表示されているスペースは、おそらく最終行の末尾にある改行です。

改行を行間のセパレーターまたはターミネーターと見なしたい場合は、すべてが要約されます(したがって、最後の行にも改行が必要です)。IMO 改行の最も一般的な用途はターミネータであり、改行が見つからない場合にそのような改行を追加するテキスト エディターもあります。

たとえば、有効な 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);
}
于 2013-09-22T12:24:15.570 に答える