2 sandco Sandco 于 2015.06.25 19:34 提问

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个回答

kongshuai19900505
kongshuai19900505   2015.06.25 19:48
已采纳

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

dong0li0nan
dong0li0nan 回复Sandco: 是不是可以读一行写一行呢,就是把两个循环合并成一个
大约 3 年之前 回复
Sandco
Sandco 请问具体要怎么修改呢
大约 3 年之前 回复
xby1993
xby1993   2015.06.25 19:39

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

Sandco
Sandco k>n直接一行也没有了……学信号的不太懂c……求解决
大约 3 年之前 回复
u011547347
u011547347   2015.07.02 19:45

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

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
关于c语言文件读写最后一行重复的问题
这几天忙于做课程设计 在初步完成后,出现了文件末尾重复读取的问题 操作系统使用的是ubuntu 16.04     linux下不支持fflush函数 首先采用小程序测试 写入文件: #include #include int main() { FILE *fp=fopen("haha.txt","w"); fprintf(fp,"%s %d %s\n","haha",
字符串最后一个单词的长度 C语言版本
描述 计算字符串最后一个单词的长度,单词以空格隔开。 知识点 字符串,循环 运行时间限制 0M 内存限制 0 输入 一行字符串,长度小于128。 输出 整数N,最后一个单词的长度。 样例输入 hello world 样例输出
求解m-n之间的所有素数,要求每6个数一行进行输出,并最后统计满足要求的素数的总数。
#include&amp;lt;stdio.h&amp;gt;#include&amp;lt;math.h&amp;gt;int a[100];int  prime( int  n ) { int  i ; for ( i = 2; i &amp;lt; n ; i ++ ) if  ( n % i == 0 )  return  ( 0 ) ; return  ( 1 ) ;}int main() { int m,n,count=0...
Ext数据表格只能显示一条数据的问题
项目中遇到以下情况: 后台返回的数据有多条,分页栏PagingToolbar显示的记录总数也正确,但gridpanel却只显示当前页的最后一条记录。百思不得其解!于是到网络上去搜相关信息,结果一篇文章给了我启发,说是主键重复,回头再去检查,发现json数据中的id字段取到的值全
C语言文件操作之--读取文件最后一行(通过fgets完成)
#include void main() { FILE* fp = fopen("E:/Test/test.txt", "r"); //注意这里的斜杠方向和换行字符斜杠方向是相反的 char a[1024]; while(!feof(fp)) { fgets(a,sizeof(a),fp); if(feof(fp)) printf("%s\n",a);
给定一个日期,输出这个日期是该年的第几天。 C语言来做
第几天? Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Submission(s) : 150   Accepted Submission(s) : 60 Problem Description 给定一个日期,输出这个日期是该年的第几天。   Input
JTable 接受vector时只显示数据的第一行
今天整个晚上都在想为什么我的JTable只显示一行数据 我把shuju
c++文件读取最后一行读取两次的问题
c++文件读取最后一行读取两次的问题新人博客。本来记笔记用word,写博客查阅更方便,资料也不容易丢失还能与人交流,也就转战博客了。在做c++文件流的题目时要求将20个数据从文件中读取到一个长度为20的向量中,我本来是这么写的: i=0; while(in.eof()==false) { if(in.bad()==false&&in.fail()==false)
fgets重复读取最后一行,都是feof惹的祸
写了一个小程序用于读取文件,每次输出时最后一行都重复输出,经Debug发现是因为feof慢了一拍。当fgets读过最后哦一行之后,feof()仍然返回的是0,又一次读出错之后feof才检测到文件结束。下面用代码来说明:  FILE *fd;   char buf[1024];   string temp;   fd = fopen(filename.c_str(), "rb");   i
<c:forEach 表格最后一行累加
0}">       /yw!doYcrSearch?cjjgdm=${yw.glbm}&type=1&cjStart=${param.cjStart}&cjEnd=${param.cjEnd}">                                                       合计           ${ydzfCount