Sandco
2015-06-25 11:34
采纳率: 100%
浏览 1.9k
已采纳

c语言 新人 求修改 这个表格输出为什么只能显示最后一行

完整代码在http://pan.baidu.com/s/1hqKoRwo
以下为表格代码 运行时只能显示一行 且为最后输入的一行
`void displayuser() //显示所有用户信息
{
FILE *p;
int k, n=0;

system("cls");
p = fopen("card", "r");

while( !feof(p) )
{
    fread(&card, sizeof(student), 1, p);
    n++;
}
fclose(p);

if( n==0 )
{
    printf("没有任何用户信息!\n\n");
}
else{
    k = 0;
    printf("┏━━━━┳━━━━━┳━━━━━━━┓\n");
    printf("┃  姓名  ┃   班级   ┃      学号    ┃\n");
    printf("┣━━━━╋━━━━━╋━━━━━━━┫\n");
    while(k<=n)
    {
        if(card[k].stuclass[0] != '\0')   //屏蔽空信息 
        {
            printf("┃%-8s┃%-10s┃%-14d┃\n", card[k].stuname, card[k].stuclass, card[k].stunum);
        }k++;
    }
    printf("┗━━━━┻━━━━━┻━━━━━━━┛\n");
}
printf("\n\n按任意键回到主菜单!\n");
getch();

}``


  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • kongslly 2015-06-25 11:48
    已采纳

    while( !feof(p) )
    {
    fread(&card, sizeof(student), 1, p);
    n++;
    }
    这个读出来一组数据会把上一组覆盖掉,n增加的时候card也要增加,别用全局数组,用指针让地址随着增加就行

    点赞 评论
  • 小小懒羊羊 2015-06-25 11:39

    while(k<=n)这个循环没有进入,因为此时k>n.

    点赞 评论
  • fourth_leaf 2015-07-02 11:45

    有两个问题:
    第一,下面代码中每次将读出的数据都存入了 card 这个缓冲中,当然仅会有最后读取的数据
    while( !feof(p) )
    {
    fread(&card, sizeof(student), 1, p);
    n++;
    }
    第二,如下面的代码,既然你将 变量 k 记作已处理的数据数目,将此时的 变量n 记作总数据数目,那么当已处理数据数小于总数据数时就应该继续循环,用代码应该表现为 "while(k < n)"
    while(k<=n)

    点赞 评论

相关推荐 更多相似问题