• 结构变量输入不正确的顺序可能会导致不正确的操作结果


    写一个程序,需求:由...制作3单向动态列表学生数据节点配置,输入学生数据向每个节点

    (每个学生的数据包含学号、全名、成就)。每个节点然后逐个输出数据。

    正确的程序,如下面的:

    #include<stdio.h>
    #include<malloc.h>
    #define LEN sizeof(struct student)


    struct student
    {
     int num;
     char name[20];
     float score;
     struct student *next;
    } ;


    void main()
    {
     struct student *head,*p,*q;
     head=p=(struct student*) malloc(LEN);
     scanf("%d,%f,%s",&p->num,&p->score,p->name);
     p=(struct student*) malloc(LEN);
     scanf("%d,%f,%s",&p->num,&p->score,p->name);
     q=(struct student*) malloc(LEN);
     scanf("%d,%f,%s",&q->num,&q->score,q->name);
     head->next=p;
     p->next=q;

    q->next=NULL;




     p=head;
     printf(" 结点 1:%d,%5.1f,%s",p->num,p->score,p->name);
     p=p->next;
     printf(" 结点 2:%d,%5.1f,%s",p->num,p->score,p->name);
     q=p->next;
     printf(" 结点 3:%d,%5.1f,%s ",q->num,q->score,q->name);


    }

    执行结果为:

    输入:

    10101,98,li
    10102,87,wang
    10103,76,qi
    输出:

    结点 1:10101, 98.0,li
    结点 2:10102, 87.0,wang
    结点 3:10103, 76.0,qi

    错误的程序例如以下:

    #include<stdio.h>
    #include<malloc.h>
    #define LEN sizeof(struct student)


    struct student
    {
     int num;
     char name[2];
     float score;
     struct student *next;
    } ;


    void main()
    {
     struct student *head,*p,*q;
     head=p=(struct student*) malloc(LEN);
     scanf("%d,%s,%f",&p->num,p->name,&p->score);
     p=(struct student*) malloc(LEN);
     scanf("%d,%s,%f",&p->num,p->name,&p->score);
     q=(struct student*) malloc(LEN);
     scanf("%d,%s,%f",&q->num,q->name,&p->score);
     head->next=p;
     p->next=q;

    q->next=NULL;




     p=head;
     printf(" 结点 1:%d,%5.1f,%s",p->num,p->score,p->name);
     p=p->next;
     printf(" 结点 2:%d,%5.1f,%s",p->num,p->score,p->name);
     q=p->next;
     printf(" 结点 3:%d,%5.1f,%s ",q->num,q->score,q->name);


    }
    执行结果为:

    输入:

    10101,wang,,98
    10102,wani,,87
    10103,wangx,,76

    输出:
    结点 1:10101,  0.0,wang,,98 p�
    结点 2:10102,  0.0,wani,,878p�
    结点 3:10103,  0.0,wangx,,7

    想要得到的结果应该为

    结点 1:10101,  98.0,wang,
    结点 2:10102,  87.0,wani,
    结点 3:10103,  76.0,wangx,


    假设将想要输入的字符串数组放在输入的中间,就极有可能导致

    在输入完字符串之后,还会将接下来输入的内容输入到字符串中,

    会导致输出值发生混乱,得不到想要的结果,因而,最好将字符串

    输入參数放在參数列表的最后,这样它有可能避免输出错误。


    版权声明:本文博客原创文章。博客,未经同意,不得转载。

  • 相关阅读:
    JAVA第六次作业
    20194672自动生成四则运算题第一版报告
    20194672自动生成四则运算第一版报告
    第四次博客作业--结对项目
    第9次作业--接口及接口回调
    第8次作业--继承
    软件工程第三次作业——关于软件质量保障初探
    第7次作业——访问权限、对象使用
    第6次作业--static关键字、对象
    Java输出矩形的面积和周长
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/4653771.html
Copyright © 2020-2023  润新知