0

以下のコードに少し問題があり、何がうまくいかなかったのか、なぜそれが何を表示しているのかを理解することはできません。助けや支援をいただければ幸いです。本来は 5 行のテキストを入力して、その 5 行を画面に表示できるはずなのですが、4 行しか入力できず、4 行表示されてしまいます。助けてください!

#include <stdio.h>

int main()
{
char string[100];
char filename[20];
int n=0;
FILE *fp;
printf(" Enter the name of file to open ");
scanf("%s",filename);
fp =fopen(filename,"wr");
if(fp==NULL)
{
    printf("unable to open File");
}
for(n=1;n<6;n++)
{
    printf("\nEnter line %d:",n+1);
    gets(string);
    fputs(string,fp);
    fputs("\n",fp);
}
fclose(fp); /*close the file*/
fp =fopen(filename,"r");
if(fp==NULL)
{
    printf("unable to open File");
}
for(n=1;n<6;n++)
{
    fgets(string,100,fp);
    printf("%s",string);
}
fclose(fp); // close after reading.
return 0;
}
4

4 に答える 4

2

問題はscanf("%s", filename);、ファイル名の後の改行を消費しないことです。したがって、 への最初の呼び出しは、gets()この改行を空行として読み取ります。

追加:

gets(string);

その行の後、入力行の読み取りを開始する前に残りの行を使い果たします。

于 2013-06-20T03:43:33.493 に答える
0

scanf("%s",filename) を gets(filename) に置き換えます

于 2013-06-20T03:42:59.223 に答える