0

これは私のコードです:

#include<stdio.h>
#include<conio.h>
#include<string.h>
int main()
{ 
    FILE *p;char c[79];
    clrscr();
    p = fopen("file1.dat","w");
    printf("\nenter lines and enter end1 to end ");
    scanf("%s",c);
    if (strcmp(c,"end1") != 0)
       do
       {  
           fputc('\n',p);
           fputs(c,p);
           gets(c);
       } while(strcmp(c,"end1")!=0);

    fclose(p);
    p = fopen("file1.dat","r");
    printf("lines in file:\n");
    while(!feof(p))
    {
        fgets(c,80,p);
        printf("%s\n",c);
    }
    fclose(p);
    return 0;
    getch();
}

私の問題は、入力する(そしてファイルに書き込む)ときです

hello
my name is abc

次に end1 と入力して終了し、ファイルの内容が読み取られて印刷されると、次のような出力が得られます

hello

my name is abc

改行が 1 行ではなく 2 行表示されるのはなぜですか? また、この問題を解決するにはどうすればよいですか?

4

3 に答える 3

1

fgets() に関しては、次の点に注意してください。

fgets() は、stream から最大で size 未満の 1 文字を読み取り、s が指すバッファーに格納します。EOF または改行の後、読み取りは停止します。改行が読み取られると、バッファに格納されます。'\0' は、バッファー内の最後の文字の後に格納されます。

fgets() でファイルを読み取り、次に printf( "%s\n", ... ) でファイルを印刷すると、2 つの改行が出力されます。

于 2013-04-03T14:34:09.047 に答える
0

文字列 sscanf'd には改行が含まれています。これは、入力したものだからです!

c[strlen(c)] = '\0'大まかな修正です。最後の改行を余分なヌルに置き換えます

于 2013-04-03T14:29:37.780 に答える