#include"stdio.h"
#include"malloc.h"
#define MAXSIZE 100
typedef char datatype;
typedef struct
{
datatype data[MAXSIZE];
int last;
}SeqList;
SeqList *CreatList()
{
SeqList *L;
L=(SeqList*)malloc(sizeof(SeqList));
L->last=-1;
return L;
}
void BuildList(SeqList *L)
{
int i;
printf("ÈôÄãÊäÈëµÄÊý¾ÝΪ'0'ʱ£¬Ôò½áÊøÊäÈë\n");
for(i=0;i<100;i++)
{
printf("ÊäÈëÊý¾Ý:");
scanf("%c",&L->data[i]);
getchar();
if(L->data[i]=='0')
break;
L->last++;
}
if(i==99)
printf("ÎÞ·¨¼ÌÐø´´½¨£¡\n");
printf("*************´´½¨³É¹¦£¡*************\n");
}
int InList(SeqList *L,int i,datatype d)
{
int j;
if(L->last==MAXSIZE-1)
{
printf("˳Ðò±íÒÑÂú!\n");
return -1;
}
if(i<1||i>L->last+1)
{
printf("λÖóö´í!\n");
return 0;
}
for(j=L->last+1;j>=i;j--)
L->data[j]=L->data[j-1];
L->data[i-1]=d;
L->last++;
printf("²åÈë³É¹¦!\n");
return 1;
}
int DeleteList(SeqList *L,int k)
{
int j;
if(k<1||k>L->last+1)
{
printf("²»´æÔÚ´ËλÖÃ!\n");
return 0;
}
for(j=k;j<=L->last;j++)
L->data[j-1]=L->data[j];
L->last--;
printf("ɾ³ý³É¹¦!\n");
return 1;
}
void PrintList(SeqList *L)
{
int i;
printf("±íÖеÄÊý¾ÝΪ£º\n");
for(i=0;i<=L->last;i++)
printf("%c\n",L->data[i]);
}
int Location(SeqList *L,datatype x)
{
int i=0;
while(i<=L->last&&L->data[i]!=x)
i++;
if(i>L->last)
return -1;
else return i;
}
int LengthList(SeqList *L)
{
return L->last;
}
int main()
{
int a,i,result;
SeqList *L;
datatype d;
while(1)
{
printf("\n ÏßÐÔ±í×Óϵͳ \n");
printf("**********************\n");
printf("* 1------½¨ ±í *\n");
printf("* 2------²å Èë *\n");
printf("* 3------ɾ ³ý *\n");
printf("* 4------ÏÔ Ê¾ *\n");
printf("* 5------²é ÕÒ *\n");
printf("* 6------È¥±í³¤ *\n");
printf("* 7------·µ »Ø *\n");
printf("**********************\n");
printf("Ñ¡Ôñ²Ëµ¥ºÅ£¨1-7£©:\n");
scanf("%d",&a);
switch(a)
{
case 1:
L=CreatList();
BuildList(L);
break;
case 2:
printf("ÇëÊäÈë²åÈëÔªËØµÄλÖÃÐÅÏ¢£º");
scanf("%d",&i);
printf("\nÇëÊäÈë²åÈëÔªËØµÄÖµ£º");
scanf("%c",&d);
getchar();
InList(L,i,d);
break;
case 3:
printf("ÇëÊäÈëɾ³ýÔªËØµÄλÖÃÐÅÏ¢£º");
scanf("%d",&i);
DeleteList(L,i);
break;
case 4:
PrintList(L);
break;
case 5:
printf("ÇëÊäÈëÐèÒª²éÕÒµÄÔªËØµÄÖµ£º");
scanf("%c",&d);
result=Location(L,d);
if(result==-1)
printf("\nδÕÒµ½¸ÃÔªËØ!\n");
else
printf("¸ÃÔªËØµÄλÖÃΪ%d",result+1);
break;
case 6:
printf("µ±Ç°ÏßÐÔ±íµÄ³¤¶ÈΪ£º%d\n",LengthList(L)+1);
break;
case 7:
return 0;
default:
printf("±§Ç¸£¬µ±Ç°Ôݲ»ÄÜÂú×ã´ËÏîÒµÎñÐèÇó!");
}
}
}
这段代码在输入字符时使用了scanf()函数和getchar()函数,但这两个函数的结合使用可能会导致错误。因为在使用scanf()函数输入完字符后,缓冲区中会留下一个换行符,而getchar()函数会读取这个换行符并把它当做下一个输入字符,从而影响到程序的正常运行。
为了避免这个问题,可以在使用scanf()函数时在格式控制符中加入空格,如将scanf("%c",&L->data[i])改为scanf(" %c",&L->data[i])。这样可以让scanf()函数忽略掉前面的空白字符,包括换行符,从而避免了使用getchar()函数时出现问题。
你可以这样修改:
(1)在输入字符时,加入了一个额外的 getchar(),用于吞掉输入缓冲区中的回车符,以避免对后续输入造成干扰。
(2)LengthList 函数返回的是最后一个元素的下标,而不是元素的个数,所以将其修改为 L->last + 1。
(3)在输出元素时,每个元素后面加上了一个换行符,以便在输出时每个元素独占一行。
可回答附加问题
你的代码怎么看呢?全是ÇëÊäÈëÐèÒª²éÕÒµÄÔªËØµÄÖµ£º。
以下答案由GPT-3.5大模型与博主波罗歌共同编写:
截屏显示为空白的原因可能是程序没有输入任何数据。在这段代码中,主要的数据是通过BuildList函数输入的,因此需要按照BuildList函数的要求输入数据,否则程序可能会显示为空白。
以下是可能导致程序无法正常运行的问题:
以下是更新过的代码:
如果我的回答解决了您的问题,请采纳!