关于动态链表的一题有点疑惑
结构题第4节的内容,按照自己的理解先写了下,不清楚为什么会这样,感觉和结构体变量声明有关,但不知道为什么。代码如下:#include <stdio.h>void main()
{
struct student //定义结构体结构
{
int num; //学号
int score; //分数
struct student *next; //存放下一个节点地址的指针
};
struct student *head; //声明可以存放student结构体地址的指针
int i, k;
for(i=0; 1; i++)
{
printf("请输入学号: ");
scanf("%d",&k); //将学号赋值给k
if(k==0?0:1) //测试k是否是0
{ //k为真即k不是0
struct student stu; //声明结构体student变量stu,i为第i次循环
stu.num = k; //将k的值(学号)赋值给学号存放单元
if(i == 0) //判断是否第1次
{
head = &stu; //第一次则将stu的地址赋予head
stu.next = NULL;//将stu的next的值赋NULL
}
else //不是第一次则说明已经存在结构体变量
{
stu.next = &stu;//将上一个变量的next存放stu的地址
stu.next = NULL; //使next的值为NULL
}
}
else //如果输入的学号是0
{
printf("\n");
for( ; i; i--) //如果i是0即第一次就输入0,则直接退出输出,i不是0则按照i的次数输出链表
{
printf("学号为%d的学生成绩为%d\n",head->num,head->score);
head = head->next;
}
break; //i是0并第一次就输入0则退出循环,结束程序。
}
printf("请输入分数: ");//接受完学号,开始接受分数
scanf("%d",&stu.score);
}
}报以下错误D:\Backup\我的文档\c\0.c(20) : error C2057: expected constant expression
D:\Backup\我的文档\c\0.c(20) : error C2466: cannot allocate an array of constant size 0
D:\Backup\我的文档\c\0.c(20) : error C2133: 'stu' : unknown size
D:\Backup\我的文档\c\0.c(44) : error C2065: 'stu' : undeclared identifier
D:\Backup\我的文档\c\0.c(44) : error C2109: subscript requires array or pointer type
D:\Backup\我的文档\c\0.c(44) : error C2224: left of '.score' must have struct/union type 我只看到了这一句错误。。。
struct student stu;
声明必须是静态的,否则应该用MALLOC来动态申请空间!既
struct student *stu;
stu = malloc(size....);
我是着么理解的。。。有错勿怪 20行, 声明数组时, 数组的大小必须是常量,不能是变量, 可以用malloc, 就像楼上说的那样。 本帖最后由 nbceshi 于 2011-4-30 10:56 编辑
问题应该不是变量的问题,因为变量在声明的时候已经赋予一个值了,结构体大小也在声明结构体的时候定义了。应该是我想声明的是一个数组结构体单元名,编译器当成了声明一个结构体数组,我添加了一个字符变量来代替数组单元名,没这个问题了,但还有2个错误,不知道什么原因。#include <stdio.h>
void main()
{
struct student //定义结构体结构
{
int num; //学号
int score; //分数
struct student *next; //存放下一个节点地址的指针
};
struct student *head; //声明可以存放student结构体地址的指针
int i, k;
char stu = 'a';
for(i=0; 1; i++,stu++)
{
printf("请输入学号: ");
scanf("%d",&k); //将学号赋值给k
if(k==0?0:1) //测试k是否是0
{ //k为真即k不是0
struct student stu; //声明结构体student变量stu,i为第i次循环
stu.num = k; //将k的值(学号)赋值给学号存放单元
if(i == 0) //判断是否第1次
{
head = &stu; //第一次则将stu的地址赋予head
stu.next = NULL;//将stu的next的值赋NULL
}
else //不是第一次则说明已经存在结构体变量
{
(stu-1).next = &stu;//将上一个变量的next存放stu的地址
stu.next = NULL; //使next的值为NULL
}
}
else //如果输入的学号是0
{
printf("\n");
for( ; i; i--) //如果i是0即第一次就输入0,则直接退出输出,i不是0则按照i的次数输出链表
{
printf("学号为%d的学生成绩为%d\n",head->num,head->score);
head = head->next;
}
break; //i是0并第一次就输入0则退出循环,结束程序。
}
printf("请输入分数: ");//接受完学号,开始接受分数
scanf("%d",&stu.score);
}
}报以下错误
D:\Backup\我的文档\c\0.c(30) : error C2088: '-' : illegal for struct
D:\Backup\我的文档\c\0.c(45) : error C2224: left of '.score' must have struct/union type
分别在30行和45行 错误语法(stu-1).next = &stu; stu只是结构体的变量名,你想把每组数据存在结构体中, 要不你在声明一个静态的定长的结构体数组, 你要不想定长, 就动态在。 struct student *stu;
stu = malloc(size....);
:ton::ton::ton:
页:
[1]