#include
#include
typedef int DataType;
#define MAXNUM 100
typedef struct {
DataType data[MAXNUM]; // 数组方法,静态内存分配
int length;
}SeqList;
int CreateSeqList(SeqList* sl)
{
int guo = 0,a = 0;
for (; a < 20; a++)
{
scanf("%d\n",&guo);
if (guo >= 0 && guo <= 9)
s1->data[a] = guo;
else break;
}
if (a > 0)
{
s1->length = a;
return 1;
}
else return 0;
}
void PrintSeqList(SeqList* sl)
{
for (int i = 0; i < s1->length; i++)
printf("%d ",s1->data[i]);
}
int InsertSeqList(SeqList* sl,int i, DataType x)
{
if (s1->length >= MAXNUM)
{
printf("上溢错误,插入失败\n");
return 0;
}
else if (i > s1->length + 1 || i < 1)
{
printf("插入位置错误,插入失败\n");
return 0;
}
else
{
for (int j = s1->length; j >= i; j--)
s1->data[j] = s1->data[j - 1];
s1->data[i - 1] = x;
s1->length++;
return 1;
}
}
int DelSeqList(SeqList* sl,int i, DataType* rtn)
{
if (s1->length == 0)
{
printf("下溢错误,删除失败\n");
return 0;
}
else if(i > s1->length || i < 1)
{
printf("删除位置错误,删除失败\n");
return 0;
}
else
{
*rtn = s1->data[i - 1];
for (int j = i; j < s1->length; j++)
s1->data[j - 1] = s1->data[j];
s1->length--;
return 1;
}
}
int InsertSeqListSorted(SeqList* sl, DataType x)
{
if (s1->length >= MAXNUM)
{
printf("上溢错误,插入失败\n");
return 0;
}
else
{
int i = 0;
for (; i < s1->length; i++)
{
if (x >= s1->data[i])
coutinue;
else if (x < s1->data[i])
break;
}
i = i + 1;//插入的位置
for (int j = s1->length; j >= i; j--)
s1->data[j] = s1->data[j - 1];
s1->data[i - 1] = x;
s1->length++;
return 1;
}
}
int main()
{
SeqList list;
list.data[] = 0;
list.length = 0;
CreateSeqList(list);
PrintSeqList(list);
return 0;
}
为什么会报错啊,还没调用其他函数
.cpp(92,30): error C2232: “->list_type::data”: 左操作数有“struct”类型,使用“.”
: warning C4473: “printf”: 没有为格式字符串传递足够的参数
: message : 占位符和其参数预计 1 可变参数,但提供的却是 0 参数
message : 缺失的可变参数 1 为格式字符串“%d”所需
1>已完成生成项目“实验一.vcxproj”的操作 - 失败。
#include<stdio.h>
#include<stdlib.h>
#include <string.h>
typedef int DataType;
#define MAXNUM 100
typedef struct {
DataType data[MAXNUM]; // 数组方法,静态内存分配
int length;
}SeqList;
int CreateSeqList(SeqList* sl)
{
int guo = 0,a = 0;
for (; a < 20; a++)
{
scanf("%d\n",&guo);
if (guo >= 0 && guo <= 9)
sl->data[a] = guo;
else break;
}
if (a > 0)
{
sl->length = a;
return 1;
}
else return 0;
}
void PrintSeqList(SeqList* sl)
{
for (int i = 0; i < sl->length; i++)
printf("%d ",sl->data[i]);
}
int InsertSeqList(SeqList* sl,int i, DataType x)
{
if (sl->length >= MAXNUM)
{
printf("上溢错误,插入失败\n");
return 0;
}
else if (i > sl->length + 1 || i < 1)
{
printf("插入位置错误,插入失败\n");
return 0;
}
else
{
for (int j = sl->length; j >= i; j--)
sl->data[j] = sl->data[j - 1];
sl->data[i - 1] = x;
sl->length++;
return 1;
}
}
int DelSeqList(SeqList* sl,int i, DataType* rtn)
{
if (sl->length == 0)
{
printf("下溢错误,删除失败\n");
return 0;
}
else if(i > sl->length || i < 1)
{
printf("删除位置错误,删除失败\n");
return 0;
}
else
{
*rtn = sl->data[i - 1];
for (int j = i; j < sl->length; j++)
sl->data[j - 1] = sl->data[j];
sl->length--;
return 1;
}
}
int InsertSeqListSorted(SeqList* sl, DataType x)
{
if (sl->length >= MAXNUM)
{
printf("上溢错误,插入失败\n");
return 0;
}
else
{
int i = 0;
for (; i < sl->length; i++)
{
if (x >= sl->data[i])
continue;
else if (x < sl->data[i])
break;
}
i = i + 1;//插入的位置
for (int j = sl->length; j >= i; j--)
sl->data[j] = sl->data[j - 1];
sl->data[i - 1] = x;
sl->length++;
return 1;
}
}
int main()
{
SeqList list;
memset(list.data, 0, MAXNUM);
list.length = 0;
CreateSeqList(&list);
PrintSeqList(&list);
return 0;
}
(1)拼写错误 sl改成s1 。continue拼错了
(2)数组初始化用memset,不是直接data[]=0
(3)传递指针参数,因为函数参数是SeqList* s1,这是一个指针,所以调用的时候使用&符号
(4)输入的时候有些问题,如果是输入一个数换行一次的话倒没问题,但是如果是一行输入很多的话scanf里面的\n就不要了
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef int DataType;
#define MAXNUM 100
typedef struct {
DataType data[MAXNUM]; // 数组方法,静态内存分配
int length;
}SeqList;
int CreateSeqList(SeqList* s1)
{
int guo = 0,a = 0;
for (; a < 20; a++)
{
scanf("%d",&guo);
if (guo >= 0 && guo <= 9)
s1->data[a] = guo;
else
break;
}
if (a > 0)
{
s1->length = a;
return 1;
}
else return 0;
}
void PrintSeqList(SeqList* s1)
{
for (int i = 0; i < s1->length; i++)
printf("%d ",s1->data[i]);
}
int InsertSeqList(SeqList* s1,int i, DataType x)
{
if (s1->length >= MAXNUM)
{
printf("上溢错误,插入失败\n");
return 0;
}
else if (i > s1->length + 1 || i < 1)
{
printf("插入位置错误,插入失败\n");
return 0;
}
else
{
for (int j = s1->length; j >= i; j--)
s1->data[j] = s1->data[j - 1];
s1->data[i - 1] = x;
s1->length++;
return 1;
}
}
int DelSeqList(SeqList* s1,int i, DataType* rtn)
{
if (s1->length == 0)
{
printf("下溢错误,删除失败\n");
return 0;
}
else if(i > s1->length || i < 1)
{
printf("删除位置错误,删除失败\n");
return 0;
}
else
{
*rtn = s1->data[i - 1];
for (int j = i; j < s1->length; j++)
s1->data[j - 1] = s1->data[j];
s1->length--;
return 1;
}
}
int InsertSeqListSorted(SeqList* s1, DataType x)
{
if (s1->length >= MAXNUM)
{
printf("上溢错误,插入失败\n");
return 0;
}
else
{
int i = 0;
for (; i < s1->length; i++)
{
if (x >= s1->data[i])
continue;
else if (x < s1->data[i])
break;
}
i = i + 1;//插入的位置
for (int j = s1->length; j >= i; j--)
s1->data[j] = s1->data[j - 1];
s1->data[i - 1] = x;
s1->length++;
return 1;
}
}
int main()
{
SeqList list;
memset(list.data,0,sizeof(list.data));
list.length = 0;
CreateSeqList(&list);
PrintSeqList(&list);
return 0;
}