鱼C论坛

 找回密码
 立即注册
查看: 2688|回复: 9

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

[复制链接]
发表于 2022-3-26 16:34:33 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#include<stdio.h>
#include<malloc.h>
#define Maxsize 50
typedef char ElemType;
typedef int status;
typedef struct {
        ElemType Name[Maxsize];
        int num[Maxsize];
        int score[Maxsize];
        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[i],&L->Name[i],&L->score[i]);
        }
        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[j]=L->num[j-1];
                L->Name[j]=L->Name[j-1];
                L->score[j]=L->score[j-1];
        }
        printf("请输入要插入的信息");
        scanf("%d %c %d",&L->num[i-1],&L->Name[i-1],&L->score[i]-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[i-1],&L->Name[i-1],&L->score[i-1]);
        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[j-1]=L->num[j];
                L->Name[j-1]=L->Name[j];
                L->score[j-1]=L->score[j];
        }
        L->length--;
        return true;       
}

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

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;
}



想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-3-26 17:51:51 | 显示全部楼层
进入死循环?你的编译器可以运行?我测试你的代码,36 个报错信息,5 个警告提示,完全无法运行。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

要最新编译器,搞得这么特殊确实很难帮得上忙。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-26 19:56:36 | 显示全部楼层
看看是不是没有清空缓冲区吧。
scanf()。会导入键盘缓冲区有残留数据。
相应的地方加上这句。
while(getchar()!='\n');
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

建议你先试试他的代码再说
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-26 20:06:49 | 显示全部楼层
本帖最后由 傻眼貓咪 于 2022-3-26 20:11 编辑
ba21 发表于 2022-3-26 19:56
看看是不是没有清空缓冲区吧。
scanf()。会导入键盘缓冲区有残留数据。
相应的地方加上这句。


如果你认为没有问题,我无话说,可能是我的问题吧,你高兴就好。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

2022326_202359.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2022-3-26 20:38:33 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-4-18 20:00:20 | 显示全部楼层
谢谢大家!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-4-18 21:17:55 | 显示全部楼层
ba21 发表于 2022-3-26 19:56
看看是不是没有清空缓冲区吧。
scanf()。会导入键盘缓冲区有残留数据。
相应的地方加上这句。

可行的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-27 16:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表