| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2984 人关注过本帖
标题:关于switchcase语句中break后会不会释放缓存?
只看楼主 加入收藏
lanke711
Rank: 9Rank: 9Rank: 9
来 自:流浪在天国之路
等 级:蜘蛛侠
威 望:7
帖 子:317
专家分:1437
注 册:2015-7-16
结帖率:100%
收藏
已结贴  问题点数:40 回复次数:8 
关于switchcase语句中break后会不会释放缓存?
程序代码:
// 学生管理系统.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#define LEN 1024


//==================================

void vIface();
void vgn2();
//学生成员结构
typedef struct sStudent
{
    int iNumber;
    char cName[50];
    char cSex[4];
    int iAge;
    int iGrade;
    int iClass;
    int iSeat;
    float fChina;
    float fEnglish;
    float fMath;
    double dAverage;
    double dTotal;
    sStudent* pNext;

}cstu[LEN],stu;
//创建单链表并录入数据
stu* screate(stu* lhead)
{
    int i=0;
    char Yn[4];

    stu* pNew, *pEnd;
    lhead =(stu*) malloc(sizeof(stu));
    if (lhead == NULL)
    {
        printf("创建头节点失败!\n");
        exit(1);
    }
    pEnd = lhead;
    printf("输入y或者n选择操作:\n");
    scanf_s("%s", Yn,4);
    while(strncmp(Yn,"Y",4)==0|| strncmp(Yn, "y", 4) == 0)
    {
        i++;
        pNew= (stu*)malloc(sizeof(stu));
        printf("学号:");
        scanf_s("%d", &pNew->iNumber);
        printf("姓名:");
        scanf_s("%s", pNew->cName,50);
        printf("性别:");
        scanf_s("%s", pNew->cSex,4);
        printf("年龄:");
        scanf_s("%d", &pNew->iAge);
        printf("年级:");
        scanf_s("%d", &pNew->iGrade);
        printf("班级:");
        scanf_s("%d", &pNew->iClass);
        printf("座位:");
        scanf_s("%d", &pNew->iSeat);

        printf("请输入三门科目成绩:\n");
        getchar();
        printf("语文:");
        scanf_s("%f", &pNew->fChina);
        printf("数学:");
        scanf_s("%f", &pNew->fMath);
        printf("英语:");
        scanf_s("%f", &pNew->fEnglish);
        if (pNew == NULL)
        {
            pEnd = pNew;
        }
        else
        {
            
            pNew->pNext = NULL;
            pEnd->pNext = pNew;
            pEnd = pNew;
        }

        getchar();
        printf("输入y或者n选择操作:\n");
        scanf_s("%c", Yn, 4);
        if (strncmp(Yn, "Y", 4) != 0 || strncmp(Yn, "y", 4) != 0)
        {
            continue;
        }
        
    }

    pEnd->pNext = NULL;
    return lhead;
}
//打印学生管理系统链表
void vPrint(stu* lHead)
{
    int i=0;
    stu* sTemp;
    sTemp = lHead;
    if (sTemp == NULL)
    {
        printf("空链表!\n");
        exit(1);
    }
    sTemp=sTemp->pNext;
    
    while (sTemp!= NULL)

    {
        sTemp->dTotal = sTemp->fChina + sTemp->fMath + sTemp->fEnglish;
        sTemp->dAverage = sTemp->dTotal / 3;
        printf("学号\t姓名\t性别\t年龄\t年级\t班级\t座位\t 语文\t\t 数学\t\t 英语\t\t 总分数\t 平均分\n");
        printf("%d\t %s\t %s\t %d\t %d\t %d\t %d\t %.4f分\t %.4f\t %.4f\t %.4lf\t %.4lf\n", sTemp->iNumber, sTemp->cName, sTemp->cSex, sTemp->iAge, sTemp->iGrade, sTemp->iClass, sTemp->iSeat, sTemp->fChina, sTemp->fMath, sTemp->fEnglish, sTemp->dTotal, sTemp->dAverage);
        sTemp = sTemp->pNext;
        ++i;
    }
    printf("总节点为:%d\n", i);
}

void vSearch(stu* lHead,int search_num)
{
    int i = 0;
    stu* iTemp;
    iTemp = lHead;
    if (iTemp == NULL)
    {
        printf("空链表");
        exit(1);
    }
    iTemp = iTemp->pNext;
    while (iTemp!=NULL)
    {
        i++;
        iTemp = iTemp->pNext;
        iTemp->dTotal = iTemp->fChina + iTemp->fMath + iTemp->fEnglish;
        iTemp->dAverage = iTemp->dTotal / 3;
        if (iTemp->iNumber == search_num)
        {
            printf("查询到以下信息:\n");
            printf("\n");
            printf("学号\t姓名\t性别\t年龄\t年级\t班级\t座位\t 语文\t\t 数学\t\t 英语\t\t 总分数\t 平均分\n");
            printf("%d\t %s\t %s\t %d\t %d\t %d\t %d\t %.4f分\t %.4f\t %.4f\t %.4lf\t %.4lf\n", iTemp->iNumber, iTemp->cName, iTemp->cSex, iTemp->iAge, iTemp->iGrade, iTemp->iClass, iTemp->iSeat, iTemp->fChina, iTemp->fMath, iTemp->fEnglish, iTemp->dTotal, iTemp->dAverage);
            break;
        }
    }
    printf("\n");
    printf("查询成功!\n");
}

void vIface()
{
    printf("\t=============================学生信息管理系统=============================\n");
    printf("\t*\t\t\t\t\t\t\t\t"); printf("\t *\n");
    printf("\t*\t\t\t\t\t\t\t\t"); printf("\t *\n");
    printf("\t*\t\t\t"); printf("      *1.录入学生信息*"); printf("\t\t\t\t *\n");
    printf("\t*\t\t\t\t\t\t\t\t"); printf("\t *\n");
    printf("\t*\t\t\t"); printf("      *2.查询学生信息*"); printf("\t\t\t\t *\n");
    printf("\t*\t\t\t\t\t\t\t\t"); printf("\t *\n");
    printf("\t*\t\t\t"); printf("      *3.打印学生信息*"); printf("\t\t\t\t *\n");
    printf("\t*\t\t\t\t\t\t\t\t"); printf("\t *\n");
    printf("\t*\t\t\t"); printf("      *4.删除学生信息*"); printf("\t\t\t\t *\n");
    printf("\t*\t\t\t\t\t\t\t\t"); printf("\t *\n");
    printf("\t*\t\t\t"); printf("      *5.排序学生成绩*"); printf("\t\t\t\t *\n");
    printf("\t*\t\t\t\t\t\t\t\t"); printf("\t *\n");
    printf("\t*\t\t\t"); printf("      *6.保存学生信息*"); printf("\t\t\t\t *\n");
    printf("\t*\t\t\t\t\t\t\t\t"); printf("\t *\n");
    printf("\t*\t\t\t"); printf("      *7.载入学生信息*"); printf("\t\t\t\t *\n");
    printf("\t*\t\t\t\t\t\t\t\t"); printf("\t *\n");
    printf("\t*\t\t\t"); printf("      *8.修改学生信息*"); printf("\t\t\t\t *\n");
    printf("\t*\t\t\t\t\t\t\t\t"); printf("\t *\n");
    printf("\t*\t\t\t"); printf("      *8.退出系统操作*"); printf("\t\t\t\t *\n");
    printf("\t*\t\t\t\t\t\t\t\t"); printf("\t *\n");
    printf("\t*\t\t\t\t\t\t\t\t"); printf("\t *\n");
    printf("\t=============================学生信息管理系统=============================\n");
    vgn2();
}

//界面选项操作
void vgn2()
{
    stu* itemp=NULL;
    int inum;
    int itemp_num;
    printf("输入1~8并回车选择需要操作的选项:\n");
    scanf_s("%d", &inum);
    switch (inum)
    {
    case 1:
        screate(itemp);
        break;
    case 2:
        printf("输入要查询的节点:\n");
        scanf_s("%d", &itemp_num);
        vSearch(itemp, itemp_num);
        break;
    case 3:
        vPrint(itemp);
        break;
    default:
        printf("操作错误!\n");
        break;
    }
    vIface();
}
int main()
{
    //stu* itemp;
    //int inum;
    /*itemp=screate();
    vPrint(itemp);
    printf("输入要查询的节点:\n");
    scanf_s("%d", &inum);
    vSearch(itemp,inum);*/
    vIface();
    return 0;
}



这是一段单链表伪代码,在main函数直接调用时,录入数据后可以打印出来,可以查询数据。
我想实现单链表各功能选择项操作。使用switch语句之后,录入数据之后,再回到界面选择打印之前录入的数据,只有显示空链表,没有数据。
我想问一下各位前辈。是否return 的head节点因为break,所以释放了缓存?
搜索更多相关主题的帖子: 控制台 管理系统 include 应用程序 
2016-05-07 12:55
alice_usnet
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:18
帖 子:370
专家分:2020
注 册:2016-3-7
收藏
得分:10 
这个函数有问题,改了一下
程序代码:
stu* screate()
{
    int i=0;
    char Yn[4];

    stu* pNew, *pEnd, *lhead = NULL;
  
    printf("输入y或者n选择操作:\n");
    scanf_s("%s",Yn,4);
    while(strncmp(Yn,"Y",4)==0|| strncmp(Yn, "y", 4) == 0)
    {
        i++;
        pNew= (stu*)malloc(sizeof(stu));
        printf("学号:");
        scanf_s("%d", &pNew->iNumber);
        printf("姓名:");
        scanf_s("%s", pNew->cName,50);
        printf("性别:");
        scanf_s("%s", pNew->cSex,4);
        printf("年龄:");
        scanf_s("%d", &pNew->iAge);
        printf("年级:");
        scanf_s("%d", &pNew->iGrade);
        printf("班级:");
        scanf_s("%d", &pNew->iClass);
        printf("座位:");
        scanf_s("%d", &pNew->iSeat);

        printf("请输入三门科目成绩:\n");
        getchar();
        printf("语文:");
        scanf_s("%f", &pNew->fChina);
        printf("数学:");
        scanf_s("%f", &pNew->fMath);
        printf("英语:");
        scanf_s("%f", &pNew->fEnglish);
        if (lhead == NULL)
        {
            lhead = pNew;
            pNew->pNext = NULL;
            pEnd = lhead;
        }
        else
        {
           
            pNew->pNext = NULL;
            pEnd->pNext = pNew;
            pEnd = pNew;
        }

        getchar();
        printf("输入y或者n选择操作:\n");
        scanf_s("%s", Yn, 4);
      
    }
    return lhead;
}

未佩好剑,转身便已是江湖
2016-05-07 18:36
lanke711
Rank: 9Rank: 9Rank: 9
来 自:流浪在天国之路
等 级:蜘蛛侠
威 望:7
帖 子:317
专家分:1437
注 册:2015-7-16
收藏
得分:0 
回复 2楼 alice_usnet
图片附件: 游客没有浏览图片的权限,请 登录注册

按照前辈改的算法,我运行了一下,录入数据后,再选择打印函数,仍然指向空链表.
断点调试了一下,如图显示,lHead无法读取内存。
求前辈指点,是哪里出了问题。谢谢!

普通人之所以普通,是因为他们普遍有一个通病,那就是认为自己永远普通。
千夫所指,我亦坚持。就算被所有人误解,我也照样守护这一切。
我们总是觉得,这些灵魂的表情,傲慢自大,目中无人,其实,真正目中无人的是我们。它们傲慢的不过是表情,而我们傲慢的却是行为!
记得,是为了忘记!
只要想着有那么一天,我就能忍受现在的每一天!
灾难并不可怕,可怕的是心中没有了希望。
你以为我在天堂,其实我正在路上。
当你觉得自己走不到终点的时候,请不要放弃。或许你的对手也是这种感觉。
2016-05-07 22:08
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10606
专家分:43182
注 册:2014-5-20
收藏
得分:0 
itemp没指向?
    case 3:
        //这里测试一下
        if (itemp == NULL)
            printf("这时的itemp是空");
        vPrint(itemp);
        break;
2016-05-07 23:18
lanke711
Rank: 9Rank: 9Rank: 9
来 自:流浪在天国之路
等 级:蜘蛛侠
威 望:7
帖 子:317
专家分:1437
注 册:2015-7-16
收藏
得分:0 
回复 4楼 吹水佬
图片附件: 游客没有浏览图片的权限,请 登录注册


测试了一下,果然没有指向。if条件直接成立了。
create函数创建输入也成功了,最后也return head了。
itemp也指向了head,为什么会没有指向?

普通人之所以普通,是因为他们普遍有一个通病,那就是认为自己永远普通。
千夫所指,我亦坚持。就算被所有人误解,我也照样守护这一切。
我们总是觉得,这些灵魂的表情,傲慢自大,目中无人,其实,真正目中无人的是我们。它们傲慢的不过是表情,而我们傲慢的却是行为!
记得,是为了忘记!
只要想着有那么一天,我就能忍受现在的每一天!
灾难并不可怕,可怕的是心中没有了希望。
你以为我在天堂,其实我正在路上。
当你觉得自己走不到终点的时候,请不要放弃。或许你的对手也是这种感觉。
2016-05-08 03:36
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10606
专家分:43182
注 册:2014-5-20
收藏
得分:30 
回复 5楼 lanke711
这类问题最好声明几个全局指针:表头指针(首记录)、节点指针(记录指针)。
具体检索表数据时,可将itemp指向头指针或节点指(itemp=头指针 or itemp=节点指针),再执行相应的过程。
2016-05-08 07:05
lanke711
Rank: 9Rank: 9Rank: 9
来 自:流浪在天国之路
等 级:蜘蛛侠
威 望:7
帖 子:317
专家分:1437
注 册:2015-7-16
收藏
得分:0 
回复 6楼 吹水佬
节点指针是用来记录头指针或者itemp指针的指向次数吗?

普通人之所以普通,是因为他们普遍有一个通病,那就是认为自己永远普通。
千夫所指,我亦坚持。就算被所有人误解,我也照样守护这一切。
我们总是觉得,这些灵魂的表情,傲慢自大,目中无人,其实,真正目中无人的是我们。它们傲慢的不过是表情,而我们傲慢的却是行为!
记得,是为了忘记!
只要想着有那么一天,我就能忍受现在的每一天!
灾难并不可怕,可怕的是心中没有了希望。
你以为我在天堂,其实我正在路上。
当你觉得自己走不到终点的时候,请不要放弃。或许你的对手也是这种感觉。
2016-05-08 11:34
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10606
专家分:43182
注 册:2014-5-20
收藏
得分:0 
以下是引用lanke711在2016-5-8 11:34:25的发言:

节点指针是用来记录头指针或者itemp指针的指向次数吗?

先写个简单点的双向链表,体会一下:首指针、节点指针和尾指针的操作。
练习一下操作链表:从首到尾或从尾到首遍历检索、选择下一个节点或上一个节点检索,这些都搞清楚就没什么大问题了。
2016-05-08 17:07
lanke711
Rank: 9Rank: 9Rank: 9
来 自:流浪在天国之路
等 级:蜘蛛侠
威 望:7
帖 子:317
专家分:1437
注 册:2015-7-16
收藏
得分:0 
回复 7楼 lanke711
好的,谢谢前辈。我会去弄懂的。

普通人之所以普通,是因为他们普遍有一个通病,那就是认为自己永远普通。
千夫所指,我亦坚持。就算被所有人误解,我也照样守护这一切。
我们总是觉得,这些灵魂的表情,傲慢自大,目中无人,其实,真正目中无人的是我们。它们傲慢的不过是表情,而我们傲慢的却是行为!
记得,是为了忘记!
只要想着有那么一天,我就能忍受现在的每一天!
灾难并不可怕,可怕的是心中没有了希望。
你以为我在天堂,其实我正在路上。
当你觉得自己走不到终点的时候,请不要放弃。或许你的对手也是这种感觉。
2016-05-08 21:51
快速回复:关于switchcase语句中break后会不会释放缓存?
数据加载中...
 
   



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

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