#include "stdio.h"
#include "windows.h"
#include "stdlib.h"
#define static int;
#define MAXSIZE 20//顺序表最大长度
/*定义顺序表*/
typedef struct
{
int sno[MAXSIZE];
char name[MAXSIZE][10];
char gender[MAXSIZE];
int score[MAXSIZE];
int length;
}sqlist;
/*初始化顺序表*/
void initlist(sqlist* l)
{
l->length = 0;
}
static creatlist(sqlist* l, int a[],char b[],char c[],int d[], int n)
{
if (n > MAXSIZE)
{
printf("空间不够,无法建立顺序表。\n");
return 0;
}
for (int k = 0; k < n; k++)
{
l->sno[k] = a[k];
l->name[k][10] = b[k];
l->gender[k] = c[k];
l->score[k] = d[k];
}
l->length = n;
return 1;
}
static list_insert(sqlist* l, int pos, int sno, char name[], char gender, int score)
{
if (pos > l->length || pos < 1)
return 0;
if (l->length + pos > MAXSIZE)
return 0;
for (int i = l->length - 1; i >= pos-1; i--)
{
l->sno[i + 1] = l->sno[i];
l->name[i + 1][10] = l->name[i];
l->gender[i + 1] = l->gender[i];
l->score[i + 1] = l->score[i + 1];
}
l->sno[pos-1] = sno;
l->name[pos - 1][10] = name;
l->gender[pos-1] = gender;
l->score[pos-1] = score;
return 1;
}
int main()
{
int STATIC;
sqlist l;
initlist(&l);
int sno[5] = { 1001,1002,1004,1005,1006 }, score[5] = { 88,66,90,77,24 };
char name[5][10] = { "ChenChen","WangGang","ShangFang","ChengPing","WangPing" }, gender[5] = { 'M','M','F','F','M' };
STATIC = creatlist(&l, sno, name, gender, score, 5);
for (int i = 0; i < 5; i++)
{
printf("%s",l->name[i]);
}
return 0;
}
上面是我目前为止写的顺序表的代码,但是程序出现几个warnings,如图:
大概就是我把结构体中的字符串传入到creatlist函数里面,运行程序之后是这样的:
求解答,求帮忙改进一下代码,谢谢各位。
你这个结构体就是把零散的数组放到一起了,结构体内单位尽量最小化
大概改了下
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
//int 后多了分号
#define static int
#define MAXSIZE 20 //顺序表最大长度
/*定义顺序表*/
typedef struct
{
int sno, score;
char name[10];
char gender;
} Node;
typedef struct
{
Node node[MAXSIZE]; //这里应该用指针,根据需要动态分配
int length;
} sqlist;
/*初始化顺序表*/
void initlist(sqlist *l)
{
l->length = 0;
}
static creatlist(sqlist *l, int a[], char b[][10], char c[], int d[], int n) //字符串数组是个二维数组。
{
if (n > MAXSIZE)
{
printf("空间不够,无法建立顺序表。\n");
return 0;
}
for (int k = 0; k < n; k++)
{
l->node[k].sno = a[k];
// l->name[k][10] = b[k];
strcpy(l->node[k].name, b[k]); // 字符串赋值
l->node[k].gender = c[k];
l->node[k].score = d[k];
}
l->length = n;
return 1;
}
//static list_insert(sqlist *l, int pos, int sno, char name[][10], char gender, int score) 也一样
int main()
{
int STATIC;
sqlist l;
initlist(&l);
int sno[5] = {1001, 1002, 1004, 1005, 1006}, score[5] = {88, 66, 90, 77, 24};
char name[5][10] = {"ChenChen", "WangGang", "ShangFang", "ChengPing", "WangPing"}, gender[5] = {'M', 'M', 'F', 'F', 'M'};
STATIC = creatlist(&l, sno, name, gender, score, 5);
for (int i = 0; i < 5; i++)
{
printf("%s ", l.node[i].name); // l->name[i]);
}
return 0;
}
问题1:字符串赋值不对
问题2:变量用.访问,指针用->访问。
正确代码如下,没问题请点击采纳答案。
字符串赋值不能简单的使用等号哟 需要使用strcpy 搜一下这个函数吧