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: 是不是可以读一行写一行呢,就是把两个循环合并成一个
2 年多之前 回复
Sandco
Sandco 请问具体要怎么修改呢
2 年多之前 回复
xby1993
xby1993   2015.06.25 19:39

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

Sandco
Sandco k>n直接一行也没有了……学信号的不太懂c……求解决
2 年多之前 回复
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
上传中...
上传图片
插入图片