为什么只有第一行字符完整打出

文件的写入与读取

先统计用户通过键盘输入的每行字符中字符的个数,并将其写入文件,然后将字符按文本文件方式存入文件中。最后从文件中读出每行字符并显示在屏幕上。文件可以存放在工程文件下,和main.c相同文件夹,文件名为test01.txt。

input

输入数据有多组:每组有多行,第一行为整数n,n>=0,表示接下来输入的字符行数,n=0时输入结束;接下来为用户从键盘输入的n行字符,注意每行字符中包含空格字符,每行字符不超过300个。

output

将用户输入的n行字符存入文件中,然后从文件中读出这n行字符并显示在屏幕上。

注意,本题目不需要提交代码,运行结果正确即可。将代码截图、运行界面和test01.txt文件内容截图上传即可。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LINE_LENGTH 300
#define FILENAME "test01.txt"
int main()
{
    int n, i, len;
    char line[MAX_LINE_LENGTH + 1];
    FILE *fp= fopen(FILENAME, "w");
    if (fp == NULL)
    {
        printf("file open error!");
        exit(1);
    }
    else
    printf("file open success!\n");
    scanf("%d", &n);
    while (n > 0)
    {
        getchar();
        fgets(line, MAX_LINE_LENGTH + 1, stdin);
        len = strlen(line) - 1;
        fprintf(fp, "%d\n", len);
        fprintf(fp, "%s", line);
        n--;
    }
    fclose(fp);
    fp = fopen(FILENAME, "r");
    if (fp == NULL) {
        printf("file open error!");
        exit(1);
    }
    while (fgets(line, MAX_LINE_LENGTH + 1, fp) != NULL)
    {
        len = atoi(line);
        fgets(line, MAX_LINE_LENGTH + 1, fp);
        printf("%s", line);
    }
    fclose(fp);
    return 0;
}


FILE *fp= fopen(FILENAME, "w");
w是写入,r是读取