while(!feof(fp))只能读取一行数据是为什么啊


#include
#include

typedef struct loupan {
    int dong;
    int danyuan;
    int room;
    enum {东=1,南=2,西=3,北=4,东南=5,东北=6,西南=7,西北=8}orientation;
    enum {复式=1,平层=2,错层=3,跃层}type;
    double square;
    enum{no=0,yes=1}sale;
    double unitprice;
    double all;
}loupan;
FILE* fp;
loupan fang[1000] = { 0 };
void addin() {
    fp = fopen("D:\\qsy.dat", "w+");
    int i;
    for (i = 0;; i++) {
        scanf_s("%d", &fang[i].dong);
        if (fang[i].dong == 0) break;
        fprintf(fp, "%d ", fang[i].dong);
        scanf_s("%d%d ",&fang[i].danyuan, &fang[i].room);
        scanf_s("%d%d", &fang[i].orientation,&fang[i].type);
        scanf_s("%lf%d%lf", &fang[i].square,&fang[i].sale,&fang[i].unitprice);
        fang[i].all = fang[i].unitprice * fang[i].square;
        fprintf(fp, "%d %d %d %d %lf %d %lf %lf\n", fang[i].danyuan, fang[i].room, fang[i].orientation, fang[i].type, fang[i].square, fang[i].sale, fang[i].unitprice,fang[i].all);
    }
    fclose(fp);
}
void displyout() {
    fp = fopen("D:\\qsy.dat", "w+");
    int i=0;
    while (!feof(fp)) {
        fscanf_s(fp,"%d %d %d %d %d %lf %d %lf %lf\n",&fang[i].dong,&fang[i].danyuan, &fang[i].room, &fang[i].orientation, &fang[i].type, &fang[i].square, &fang[i].sale, &fang[i].unitprice,&fang[i].all);
        printf("栋:%d 单元:%d 房间:%d ", fang[i].dong, fang[i].danyuan, fang[i].room);
        switch (fang[i].orientation) {
        case 1:printf("朝向:东   "); break;
        case 2:printf("朝向:南   "); break;
        case 3:printf("朝向:西   "); break;
        case 4:printf("朝向:北   "); break;
        case 5:printf("朝向:东南 "); break;
        case 6:printf("朝向:东方 "); break;
        case 7:printf("朝向:西南 "); break;
        case 8:printf("朝向:西北 "); break;
        }
        switch (fang[i].type) {
        case 1:printf("户型:复式 "); break;
        case 2:printf("户型:平层 "); break;
        case 3:printf("户型:错层 "); break;
        case 4:printf("户型:跃层 "); break;
        }
        printf("面积:%lf ", fang[i].square);
        switch (fang[i].sale) {
        case 1:printf("是否已销售:yes "); break;
        case 2:printf("是否已销售:no "); break;
        }
        fang[i].all = fang[i].unitprice * fang[i].square;
        printf("单价:%lf 总额:%lf\n", fang[i].unitprice,fang[i].all);
        i++;
    }
    fclose(fp);
    
}

void main(){
    addin();
    displyout();

那你先想办法打开qsy.dat看看,里面到底有几行数据呀

fprintf(fp, "%d %d %d %d %lf %d %lf %lf\n ---------8个
fscanf_s(fp,"%d %d %d %d %d %lf %d %lf %lf\n---9个