关于链表输出的问题-输出乱码或不能输出全部
各位牛哥大家好,有问题请教!
这个链表输入中文,可是输入一组之后,就结束了。想办法解决输入问题之后,可是输出 的是乱码!在下实在不知其解,特请教各位!!
万分感谢!
#include<string.h>
#include<ctype.h>
#include<malloc.h> /* malloc()等 */
#include<limits.h> /* INT_MAX等 */
#include<stdio.h> /* EOF(=^Z或F6),NULL */
#include<stdlib.h> /* atoi() */
#include<io.h> /* eof() */
#include<math.h> /* floor(),ceil(),abs() */
#include<process.h> /* exit() */
/* 函数结果状态代码 */
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
/* #define OVERFLOW -2 因为在math.h中已定义OVERFLOW的值为3,故去掉此行 */
typedef int Status; /* Status是函数的类型,其值是函数结果状态代码,如OK等 */
typedef int Boolean; /* Boolean是布尔类型,其值是TRUE或FALSE */
typedef char ElemType;
#define LIST_INIT_SIZE 50 /* 线性表存储空间的初始分配量 */
#define LISTINCREMENT 20 /* 线性表存储空间的分配增量 */
typedef struct LNode
{
ElemType data;
struct LNode *next;
}*LinkList;
Status InitList(LinkList *L)
{ /* 操作结果:构造一个空的线性表L */
*L=(LinkList)malloc(sizeof(struct LNode)); /* 产生头结点,并使L指向此头结点 */
if(!*L) /* 存储分配失败 */
exit(OVERFLOW);
(*L)->next=NULL; /* 指针域为空 */
return OK; }
Status ListInsert(LinkList L,int i,ElemType e) /* 算法2.9。不改变L */
{ /* 在带头结点的单链线性表L中第i个位置之前插入元素e */
int j=0;
LinkList p=L,s;
while(p&&j<i-1) /* 寻找第i-1个结点 */
{
p=p->next;
j++;
}
if(!p||j>i-1) /* i小于1或者大于表长 */
return ERROR;
s=(LinkList)malloc(sizeof(struct LNode)); /* 生成新结点 */
s->data=e; /* 插入L中 */
s->next=p->next;
p->next=s;
return OK;
}
Status ListOutput(LinkList L)
{ /* 初始条件:线性表L已存在 */
//将线性表L中所有元素在屏幕中输出
LinkList p=L->next;
while(p)
{
printf("%c",p->data); // 元素在屏幕中输出 d
p=p->next; //指向下一个结点
}
printf("\n");
return OK;
}
Status DestroyList(LinkList *L)
{ /* 初始条件:线性表L已存在。操作结果:销毁线性表L */
LinkList q;
while(*L)
{ q=(*L)->next;
free(*L);
*L=q; }
return OK; }
void main( )
{LinkList L;
ElemType e[30]; //定义数组
int j;
// char ch;
InitList(&L);
for(j=1;j<=5;j++)
{printf("请输入数据:");
scanf("%c",&e[30]);
// ch=getchar();
ListInsert(L,j,e[30]);
}
ListOutput(L);
printf("输出完毕,表将销毁");
DestroyList (&L);
}//我自己想问题是不是少了某个头文件,可是找不到是哪个!
[解决办法]
中文占用两个字符,而插入函数用的是一个字符
[解决办法]
汉字在大多数平台下都是占用两个字节的(当然,也有例外)
scanf("%c",&e[30]);
===================
e[30]?什么意思?ElemType e[30];//这是e[0:29]啊;另外定义成数组有特殊含义吗?
直接ElemType e;不久行吗?
//ch=getchar();
===================
这的确是必要的,用以"吃掉"回车符,为什么要注释掉?另外此处返回值没有用处.大可以直接getchar();
其余的....楼主再试一试吧...