首页 > 代码库 > 结构体中变量输入顺序不对会导致执行结果不对

结构体中变量输入顺序不对会导致执行结果不对

写了一个程序,需求是:建立由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("\n结点 1:%d,%5.1f,%s",p->num,p->score,p->name);
 p=p->next;
 printf("\n结点 2:%d,%5.1f,%s",p->num,p->score,p->name);
 q=p->next;
 printf("\n结点 3:%d,%5.1f,%s\n",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("\n结点 1:%d,%5.1f,%s",p->num,p->score,p->name);
 p=p->next;
 printf("\n结点 2:%d,%5.1f,%s",p->num,p->score,p->name);
 q=p->next;
 printf("\n结点 3:%d,%5.1f,%s\n",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,


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

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

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

输入参数放在参数列表的最后,这样就可以避免输出产生错误。


结构体中变量输入顺序不对会导致执行结果不对