helenl 发表于 2022-3-26 16:34:33

为什么输入信息,之后进入了死循环????

#include<stdio.h>
#include<malloc.h>
#define Maxsize 50
typedef char ElemType;
typedef int status;
typedef struct {
        ElemType Name;
        int num;
        int score;
        int length;
}Sqstulist;

void InitList(Sqstulist *&L)//初始化
{
        L=(Sqstulist *)malloc(sizeof(Sqstulist));
        L->length=0;
}

bool CreateList(Sqstulist *L)//加入学生信息
{
        int i;
        printf("请输入表长:");
        scanf("%d",&L->length);
        if(L->length<1||L->length>Maxsize)
        {
                return false;
        }
        printf("请分别输入学号、姓名、分数:\n");
        for(i=0;i<L->length;i++)
        {
                scanf("%d %c %d",&L->num,&L->Name,&L->score);
        }
        return true;
}

bool InsertList(Sqstulist *L,int i)//插入学生信息
{
        int j;
        if(i<1||i>L->length+1)
        {
                return false;
        }
        for(j=L->length;j<i;j--)
        {
                L->num=L->num;
                L->Name=L->Name;
                L->score=L->score;
        }
        printf("请输入要插入的信息");
        scanf("%d %c %d",&L->num,&L->Name,&L->score-1);
        L->length++;
        return true;
}

bool amendList(Sqstulist *L,int i)   //修改学生信息
{
       
        if(i<1||i>L->length)
        {
                return false;
        }
        printf("请输入修改的内容:");
        scanf("%d %c %d",&L->num,&L->Name,&L->score);
        return true;
}

bool DeleteList(Sqstulist *L,int i)//删除学生信息
{
        int j;
        if(L->length==NULL)
        {
                return false;
        }
        if(i<1||i>L->length)
        {
                return false;
        }
        for(j=i;j<L->length;j++)
        {
                L->num=L->num;
                L->Name=L->Name;
                L->score=L->score;
        }
        L->length--;
        return true;       
}

status OutList(Sqstulist *L)//输出学生信息
{
        int i;
        for(i=0;i<L->length;i++)
        {
                printf("%d %c %d\n",L->num,L->Name,L->score);
        }
}

void Destroylist(Sqstulist *L)//销毁顺序表
{
        free(L);
}

void meaun()//选择菜单
{
        printf("2.插入学生信息\n");
        printf("3.修改学生信息\n");
        printf("4.删除学生信息\n");
        printf("5.输出学生信息\n");
        printf("6.输入0退出\n");
}

int main()
{
        Sqstulist *L;
        int a,j,k,n;
        InitList(L);
        CreateList(L);
        while(1)
        {
                meaun();
                printf("\n\n请输入要执行的序号:");
                scanf("%d",&a);
                switch(a)
                {
                       
                        case 2:
                                printf("请输入要插入学生信息的位置:");
                                scanf("%d",&j);
                                InsertList(L,j);
                                break;       
                        case 3:
                                printf("请输入要修改的位置:");       
                                scanf("%d",&k);
                                amendList(L,k);
                                break;
                        case 4:
                                printf("请输入要删除的位置:");
                                scanf("%d",&n);
                                DeleteList(L,n);
                                break;
                        case 5:
                                OutList(L);
                                break;
                        case 0:
                                break;
                        default:printf("你输入的编号不正确!\n");break;
                }
                if(a==0)
                {
                        break;
                }
        }
        Destroylist(L);
        return 0;
}



傻眼貓咪 发表于 2022-3-26 17:51:51

进入死循环?你的编译器可以运行?我测试你的代码,36 个报错信息,5 个警告提示,完全无法运行。

ba21 发表于 2022-3-26 19:55:02

傻眼貓咪 发表于 2022-3-26 17:51
进入死循环?你的编译器可以运行?我测试你的代码,36 个报错信息,5 个警告提示,完全无法运行。

要最新编译器,搞得这么特殊确实很难帮得上忙。

ba21 发表于 2022-3-26 19:56:36

看看是不是没有清空缓冲区吧。
scanf()。会导入键盘缓冲区有残留数据。
相应的地方加上这句。
while(getchar()!='\n');

傻眼貓咪 发表于 2022-3-26 20:05:25

ba21 发表于 2022-3-26 19:56
看看是不是没有清空缓冲区吧。
scanf()。会导入键盘缓冲区有残留数据。
相应的地方加上这句。


建议你先试试他的代码再说

傻眼貓咪 发表于 2022-3-26 20:06:49

本帖最后由 傻眼貓咪 于 2022-3-26 20:11 编辑

ba21 发表于 2022-3-26 19:56
看看是不是没有清空缓冲区吧。
scanf()。会导入键盘缓冲区有残留数据。
相应的地方加上这句。


如果你认为没有问题,我无话说,可能是我的问题吧,你高兴就好。

ba21 发表于 2022-3-26 20:24:25

傻眼貓咪 发表于 2022-3-26 20:06
如果你认为没有问题,我无话说,可能是我的问题吧,你高兴就好。

傻眼貓咪 发表于 2022-3-26 20:38:33

ba21 发表于 2022-3-26 20:24


.cpp
.c

helenl 发表于 2022-4-18 20:00:20

谢谢大家!

惊晓欲仙 发表于 2022-4-18 21:17:55

ba21 发表于 2022-3-26 19:56
看看是不是没有清空缓冲区吧。
scanf()。会导入键盘缓冲区有残留数据。
相应的地方加上这句。


可行的
页: [1]
查看完整版本: 为什么输入信息,之后进入了死循环????