weixin_75182303 2022-12-21 08:32 采纳率: 100%
浏览 28
已结题

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


#include<stdio.h>
#include<stdlib.h>

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();

展开全部

  • 写回答

3条回答 默认 最新

  • 於黾 2022-12-21 08:52
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
    weixin_75182303 2022-12-22 04:35

    几行数据是自己输进去的啊,可是我明明输了两行进去但是出来的只有一行

    回复
    於黾 回复 weixin_75182303 2022-12-22 05:33

    qsy.dat是个二进制文件,你是从哪里输进去的,不还是代码吗
    很可能你第二次输入的数据将第一次的覆盖了,没有追加到后面,所以让你打开文件看呀

    回复
    weixin_75182303 回复 於黾 2022-12-22 08:08

    刚刚输入数据的时候打开文件是有三行,但是程序执行完之后就变成空了,而且输出的也是第一行的数据

    回复
    展开全部5条评论
查看更多回答(2条)
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 12月29日
  • 已采纳回答 12月22日
  • 创建了问题 12月21日
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部