标题:[在学校裸奔]这是在下写的一个顺序表...出了很多问题...在线等啊!!
取消只看楼主
死了都要编
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2007-10-11
 问题点数:0 回复次数:7 
[在学校裸奔]这是在下写的一个顺序表...出了很多问题...在线等啊!!

我的输出和删除怎么老是出现问题呢
每当我插入值的时候
比如说
我建了一个表,元素个数为三
元素1:a
元素2:b
元素3:c
在第三个位置插入2吧
插入成功后
我一输出,就成了乱码了.
....我都快被搞疯了

***********************************************************
#include"stdio.h"
#include"malloc.h"
#define maxsize 100
typedef char Sqltype;
typedef struct
{
Sqltype Sql[maxsize];
int leng;
}sqlist;


void creatList(sqlist *l)//l=*L
{
char i;
short int n;
printf("输入元素个数\n");
scanf("%s",&n);
for(i=0;i<n;i++)
{
printf("请输入第%d个元素值:",i+1);
scanf("%s",l->Sql+i);
}
l->leng=n-1;
printf("\n");
}

//在第i个位置前插入x
insert(sqlist *l,Sqltype i,int x)
{
int j;
if(l->leng==maxsize-1)
{
printf("线性表已满");
return 0;
}
else if((i<0)||i>(l->leng+1))
{
printf("你的输入超出范围了!\n");
return 0;
}
else
{
for(j=l->leng;j>=i;j--)
{
l->Sql[i]=l->Sql[i-1];
l->Sql[i-1]=x;
l->leng++;
printf("插入成功\n");
}
return 1;
}
}


int del(sqlist *l,int x)
{
if(x<1||(x>l->leng))
{
printf("错误,该值不存在!请重新输入!\n");
return 0;
}
else
for(;x<l->leng;x++)
{
l->Sql[x]=l->Sql[x+1];
l->leng--;
printf("删除成功!\n");
}
return 1;
}

/* Location(sqlist l, Sqltype i)
{
int x=0;
while(x<(l->leng) && (l->Sql[x])!=i)
x++;
if(x>=l->leng)
{
printf("超出范围!");
return 0;
}
else
return x;
}*/


void prinout(sqlist *l)
{
int i;
if(l->leng<0||(i>l->leng))
{
printf("无此顺序表!\n");
}
else
for(i=0;i<=l->leng;i++)
{
printf("第%d个元素是:%s",i+1,&l->Sql[i]);
printf("\n");
}
}

void main()
{
int i,choise;
int s;
sqlist *L;
L=(sqlist*)malloc(sizeof(sqlist));
do
{
printf("*******************************\n");
printf("** 1.创建顺序表 ****\n");
printf("** 2.插入顺序表 ****\n");
printf("** 3.删除顺序表 ****\n");
printf("** 4.查找顺序表中的一个元素****\n");
printf("** 5.输出顺序表 ****\n");
printf("** 6.退出 ****\n");
printf("****请输入你的选择*************\n");
scanf("%d",&choise);
switch(choise)
{
case 1:
creatList(L);
break;
case 2:
printf("请输入要插入数值:");
scanf("%s",&s);
printf("请输入要插入的位置:");
scanf("%d",&i);
insert(L,i,s);
break;
case 3:
printf("输入你要删除元素的位置:");
scanf("%d",&i);
del(L,i);
break;
/* case 4:
printf("请输入你要查找的位置:");
scanf("%d",i);
Location(L,i);
break;*/
case 5:
prinout(L);
break;
default:
if(choise!=6)
{
printf("非法输入,请重新选择\n");
}
else break;
}
}while(choise!=6);
}





[此贴子已经被作者于2007-10-12 8:50:24编辑过]

搜索更多相关主题的帖子: 裸奔 顺序 学校 在线 
2007-10-12 08:48
死了都要编
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2007-10-11
得分:0 
怎么没人鸟的...
2007-10-12 09:18
死了都要编
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2007-10-11
得分:0 

这东西太难了
才刚学不到一个星期
.....看的头都大了

2007-10-12 10:04
死了都要编
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2007-10-11
得分:0 

void prinout(sqlist *l)
{
int i;
if(l->leng<0||(i>l->leng))
{
printf("无此顺序表!\n");
}
else
for(i=0;i<=l->leng;i++)
{
printf("第%d个元素是:%s",i+1,&l->Sql[i]);
printf("\n");
}
}

void main()

为什么在
if(l->leng<0||(i>l->leng))
{
printf("无此顺序表!\n");
}会有个警告说已经初始化过i了..

2007-10-12 10:16
死了都要编
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2007-10-11
得分:0 
warning C4761: integral size mismatch in argument; conversion supplied
case 2:
printf("请输入要插入数值:");
scanf("%s",&s);
printf("请输入要插入的位置:");
scanf("%d",&i);
insert(L,i,s);//这里也出了个警告
break;
....
2007-10-12 10:21
死了都要编
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2007-10-11
得分:0 

刚刚修改过的
但是插入和删除功能还是有问题..
我无语了


#include"stdio.h"
#include"malloc.h"
#define maxsize 100
typedef char Sqltype;
typedef struct
{
Sqltype Sql[maxsize];
int leng;
}sqlist;


void creatList(sqlist *l)//l=*L
{
int i;
short int n;
printf("输入元素个数\n");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("请输入第%d个元素值:",i+1);
scanf("%s",l->Sql+i);
}
l->leng=n-1;
printf("\n");
}

//在第i个位置前插入x
insert(sqlist *l,Sqltype i,int x)
{
int j;
if(l->leng==maxsize-1)
{
printf("线性表已满");
return 0;
}
else if((i<0)||i>(l->leng+1))
{
printf("你的输入超出范围了!\n");
return 0;
}
else
{
for(j=l->leng;j>=i;j--)
{
l->Sql[i]=l->Sql[i-1];
l->Sql[i-1]=x;
l->leng++;

}
printf("插入成功\n");
return 1;
}
}


int del(sqlist *l,int x)
{

if(x<1||(x>l->leng))
{
printf("错误,该值不存在!请重新输入!\n");
return 0;
}
else
for(;x<l->leng;x++)
{
l->Sql[x]=l->Sql[x+1];
l->leng--;

}
printf("删除成功!\n");
return 1;
}

/* Location(sqlist l, Sqltype i)
{
int x=0;
while(x<(l->leng) && (l->Sql[x])!=i)
x++;
if(x>=l->leng)
{
printf("超出范围!");
return 0;
}
else
return x;
}*/


void prinout(sqlist *l)
{
int i;
i=0;
if((i>l->leng)||(l->leng<0))
{
printf("无此顺序表!\n");
}
else
for(i=0;i<=l->leng;i++)
{
printf("第%d个元素是:%c",i+1,l->Sql[i]);
printf("\n");
}

}

void main()
{
int i,choise;
int s;
sqlist *L;
L=(sqlist*)malloc(sizeof(sqlist));
do
{
printf("*******************************\n");
printf("** 1.创建顺序表 ****\n");
printf("** 2.插入顺序表 ****\n");
printf("** 3.删除顺序表 ****\n");
printf("** 4.查找顺序表中的一个元素****\n");
printf("** 5.输出顺序表 ****\n");
printf("** 6.退出 ****\n");
printf("****请输入你的选择*************\n");
scanf("%d",&choise);
switch(choise)
{
case 1:
creatList(L);
break;
case 2:
printf("请输入要插入数值:");
scanf("%s",&s);
printf("请输入要插入的位置:");
scanf("%d",&i);
insert(L,i,s);
break;
case 3:
printf("输入你要删除元素的位置:");
scanf("%d",&i);
del(L,i);
break;
/* case 4:
printf("请输入你要查找的位置:");
scanf("%d",i);
Location(L,i);
break;*/
case 5:
prinout(L);
break;
default:
if(choise!=6)
{
printf("非法输入,请重新选择\n");
}
else break;
}
}while(choise!=6);
}

2007-10-12 10:34
死了都要编
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2007-10-11
得分:0 
现在进入删除功能
它怎么都无法删除最后一个元素
而插入功能呢
一旦你一插入成功后
你一输出
...它出来的跟你之前创建的就不一样.
那个scanf("%s",l->Sql+i);
这里出了什么问题...
如果有错应该是l->Sql+i这里吧
我之前定义的"%s"是以字符串输入的

2007-10-12 10:43
死了都要编
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2007-10-11
得分:0 



2007-10-12 10:51



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-176929-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.135863 second(s), 9 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved