恰如风 2022-01-05 11:59 采纳率: 71.4%
浏览 51
已结题

为什么这个显示函数除了显示要显示的数据之外还会有乱码

void show()
{
FILE * fp;
int clas;
long long stu_code;
long long id_code;
char sex[5];
char enyear[10];
char birthday[20];
char major[10];
char name[10];
struct stu_node * tail, * head=NULL;
struct stu_node * pMove;
struct stu_node * n;
if((fp=fopen("test.dat","r"))==NULL)
{
fp=fopen("test.dat","w+");
fclose(fp);
}
while(fscanf(fp,"%s%s%s%d%s%lld%lld%s\n",name,sex,major,&clas,birthday,&stu_code,&id_code,enyear)!=EOF)
{
n=(struct stu_node * )malloc(sizeof(struct stu_node));
n->clas=clas;n->stu_code=stu_code,n->id_code=id_code;
strcpy(n->name,name);strcpy(n->sex,sex);
strcpy(n->major,major);strcpy(n->enyear,enyear);
strcpy(n->birthday,birthday);
if(head==NULL) head=n;
else tail->next=n;
tail=n;
}
fclose(fp);
pMove=head;
printf("姓名\t性别\t专业\t班级\t出生日期\t学籍号\t身份证号\t入学日期\n");
while(pMove!=NULL)
{
printf("%s\t%s\t%s\t%d\t%s\t%lld\t%lld\t%s\n",pMove->name,pMove->sex,pMove->major,pMove->clas,pMove->birthday,pMove->stu_code,pMove->id_code,pMove->enyear);
pMove=pMove->next;
}
}

  • 写回答

3条回答 默认 最新

  • qzjhjxj 2022-01-05 13:32
    关注

    修改如下,供参考:

    void show()
    {
        FILE* fp;
        int  clas;
        long long stu_code, id_code;
        char sex[5], enyear[10], birthday[20], major[10], name[10];
        struct stu_node* tail = NULL, * head = NULL, * pMove = NULL, * n = NULL;
        if ((fp = fopen("test.dat", "r")) == NULL)
        {
            fp = fopen("test.dat", "w+");
            fclose(fp);
            return;
        }
        while (1)
        {
            if (fscanf(fp,"%s%s%s%d%s%lld%lld%s\n", name, sex, major, &clas, 
                                 birthday, &stu_code, &id_code, enyear) != 8) break;
            n = (struct stu_node*)malloc(sizeof(struct stu_node));
            n->next = NULL;
            n->clas = clas; n->stu_code = stu_code, n->id_code = id_code;
            strcpy(n->name, name);   strcpy(n->sex, sex);
            strcpy(n->major, major); strcpy(n->enyear, enyear);
            strcpy(n->birthday, birthday);
            if (head == NULL) 
                head = n;
            else 
                tail->next = n;
            tail = n;
        }
        fclose(fp);
        pMove = head;
        printf("姓名\t性别\t专业\t班级\t出生日期\t学籍号\t身份证号\t入学日期\n");
        while (pMove != NULL)
        {
            printf("%s\t%s\t%s\t%d\t%s\t%lld\t%lld\t%s\n", pMove->name, pMove->sex, pMove->major, 
                      pMove->clas, pMove->birthday, pMove->stu_code, pMove->id_code, pMove->enyear);
            pMove = pMove->next;
        }
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 1月13日
  • 已采纳回答 1月5日
  • 修改了问题 1月5日
  • 创建了问题 1月5日

悬赏问题

  • ¥15 使用C#,asp.net读取Excel文件并保存到Oracle数据库
  • ¥15 C# datagridview 单元格显示进度及值
  • ¥15 thinkphp6配合social login单点登录问题
  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配