c语言为什么不能自动free,求大神帮忙看看 为什么cfree没有报错但是就是运行不了...

article/2025/10/15 12:55:21

ca56232b3bbedf9a539d07f37fffb99a.gif

3144d8b7615c79d9f638db40d5689d26.gif

a218af6549b45ee526caf607ebff1358.gif

0f8df0e29816ae721419de940fb833d1.gif

求大神帮忙看看 为什么cfree没有报错但是就是运行不了

#include

#include

#include

#define Insert 1 //增加订单

#define Query  2 //查找订单

#define Update 3 //修改订单

#define Delete 4 //删除订单

#define List   5 //列出所有订单

#define Quit   0 //退出系统

FILE *fp;

struct Node

{

char name[20];

char foodname[20];

int sum;

char time[20];

int number;

struct Node *next;

};

struct Node *pointer,*tail;   //pointer指向第一订餐的学生,tail指向最近一次订餐的学生

int last=0; //当前订餐总人数

void showMenu();

void doChoice(int);

int  getChoice();

void doQuit();

void doInsert();

void doUpdate();

void doQuery();

void doDelete();

void doListAll();

void init();

int main(int argc,char *argv[])

{

int choice;    //用户选择功能

init();        //从文件中初始化订餐信息

while(1)

{

showMenu();             //显示主菜单

choice=getChoice();     //获取用户选择

doChoice(choice);

system("pause>nul") ;      //执行用户选择

}

return 0;

}

void init()

{

int i=0;

struct Node *p;

pointer=tail=NULL;

if((fp=fopen("order.dat","rb"))==NULL)

{

last=0;//当前没有订餐数据

}

else

{

while(!feof(fp))

{

if((p=(struct Node *)malloc(sizeof(struct Node)))==NULL)

{

printf("系统内存故障,退出程序");

exit(0);

}

if(fread(p,sizeof(struct Node),1,fp)==1)

{

if(i==0)

{

pointer=tail=p;   //第一个订餐学生

}

i++;

tail->next=p;

tail=p;

}

}

tail->next=NULL;

last=i;

}

fclose(fp);

}

void save()   //保存订单信息到文件pointer.txt中

{

struct Node *p=pointer;

if((fp=fopen("order.txt","wb"))==NULL)

{

printf("不能打开订单信息,请检查");

exit(0);

}

while(p!=NULL)

{

if(fwrite(p,sizeof(struct Node),1,fp)==1)

{

p=p->next;

}

}

fclose(fp);

}

void showMenu()

{

system("cls");

printf("**********Student Food-Order System*********\n");

printf("\t\t1.   点外卖\n");

printf("\t\t2.   查找订单\n");

printf("\t\t3.   修改订单\n");

printf("\t\t4.   删除订单\n");

printf("\t\t5.   查看所有订单\n");

printf("\t\t6.   退出系统\n");

printf("************************\n");

printf("请输入你的选择(0---6):\n");

}

void doQuit()

{

printf("\n欢迎使用本系统,再见!");

exit(0);

}

void doInsert()

{

struct Node *p;

if((p=(struct Node *)malloc(sizeof(struct Node)))==NULL)

{

printf("该店点餐人员爆满,请稍后进入");

return ;

}

printf("请输入编号:");

scanf("%d",&(p->number));

printf("请输入姓名:");

scanf("%s",p->name);

printf("请输入菜名:");

scanf("%s",p->foodname);

printf("请输入人数:");

scanf("%d",&(p->sum));

printf("请输入用餐时间:");

scanf("%s",p->time);

printf("点餐成功\n");

if(tail!=NULL)

{

tail->next=p;

tail=tail->next;

}

else

{

{

for(p=pointer;p->next!=NULL;p=p->next)

p->next=p;

}

tail->next=NULL;

last++;

save();

}

}

void doUpdate()

{

int number;

int i;

int find=0;

struct Node *p=pointer;

printf("请输入要修改的订单号码:");

scanf("%d",&number);

while((p!=NULL)&&(!find))

{ if(p->number==number)

{

find=1;

printf("你要找的订单信息如下:\n");

printf("*******************************");

printf("姓名:%s\t",p->name);

printf("菜名:%s\t",p->foodname);

printf("人数:%d\t",p->sum);

printf("用餐时间%s\t",p->time);

printf("*******************************");

printf("请输入修改后的信息:\n");

printf("姓名:\n");

scanf("%s",p->name);

printf("菜名:\n");

scanf("%s",p->foodname);

printf("人数:\n");

scanf("%d",&(p->sum));

printf("请输入用餐时间:\n");

scanf("%s",p->time);

}

p=p->next;

}

if(!find)

{

printf("无法找到该订单,请重新下单\n");

}

else

{

printf("该订单修改成功\n");

save();

}

p=NULL;

}

void doListAll()

{

struct Node *p=pointer;

printf("该店目前有%d人在线\n",last);

while(p!=NULL)

{

printf("*******************************\n");

printf("姓名:%s\t",p->name);

printf("菜名:%s\t",p->foodname);

printf("人数:%d\t",p->sum);

printf("用餐时间%s\n",p->time);

p=p->next;

}

printf("***************************\n");

}

void doQuery()

{

int number;

int i;

int find=0;

struct Node *p=pointer;

printf("处理查询.....\n");

printf("请输入订单号码:");

scanf("%d",&number);

while((p!=NULL)&&(!find))

{ if(p->number==number)

{

find=1;

printf("你要找的订单信息如下:\n");

printf("*******************************\n");

printf("姓名:%s\t",p->name);

printf("菜名:%s\t",p->foodname);

printf("人数:%d\t",p->sum);

printf("用餐时间%s\t",p->time);

}

p=p->next;

}

if(!find)

{

printf("没有此订单\n");

}

}

void doDelete()

{

int number;

int i;

int find=0;

int index;

struct Node *p=pointer;

struct Node *pre=pointer;

printf("处理删除.....\n");

printf("请输入订单编号:\n");

scanf("%d",&number);

while((p!=NULL)&&(!find))

{

if(p->number==number)

{

find=1;

index=i;

break;

}

pre=p;

p=p->next;

}

if(!find)

{

printf("没有该编号订单\n");

}

else

{

if(p==pre)

{

pointer=NULL;

last=0;

}

else

{

pre->next=p->next;

last--;

printf("订单已删除\n");

save();

}

}

}

int getChoice()

{

int choice;

scanf("%d",&choice);

return choice;

}

void doChoice(int choice)

{

switch(choice)

{

case Insert:

doInsert();

break;

case Query:

doQuery();

break;

case Update:

doUpdate();

break;

case Delete:

doDelete();

break;

case List:

doListAll();

break;

case Quit:

doQuit();

}

}


http://chatgpt.dhexx.cn/article/VQmh25Oh.shtml

相关文章

关于CFree5.0中设置支持C99模式

关于C-Free5.0中设置支持C99模式,分为以下几个步骤: 1.打开C-Free5.0,在左上角找到‘构建(B)’ 2.展开‘构建(B)’,点击最下方的‘构建选项’ 3.在‘编译’一栏看到红色框区域&am…

C-Free 5 加 TDM-GCC编辑器搭建C/C++开发环境

本文所需要的安装程序下载地址:https://download.csdn.net/download/fangfang635344731/10705407 1.安装C-Free 5,这一步重点是安装路径绝对不能有空格!!!我的安装路径为“C:\C-Free5”。 2.安装TDM-GCC,…

C语言基础入门:C-Free5设置支持C99标准

问题: 在使用C-Free 5.0调试程序时,编译提示不支持C99模式,错误! 具体问题如下图所示: 解决方法1:对已创建工程的设置,仅对该工程有效。 右键点击“文件列表窗口”中的工程 从上到下&#x…

Cfree-5各种抽风解决办法

最近好像笔记本单步调试用不了,本想去Cfree吧求助,没想到首页就有个和我问题一毛一样的,还有大神在楼下给出了解答,好开森!赶紧记录(chaoxi)到这啦,免得以后抽风。 我这里是最近变成…

cfree5文件标签混乱处理。

有时cfree5并不听话,文件列表标签会乱显示,非常影响心情: 如上面红线内部分,怎么也处理不了。 以前用cfree4安装后再安装5可以处理,但最近处理不了。琢磨了一下,发现原来解决办法很简单: 一、对…

cfree5更新C++11特性

昨天在调试程序的时候,发现有些最新的函数Cfree并不支持,因为最新出来的C11特性不满足。C11标准较之前的版本在性能上有很大改变,具体请查阅百度或谷歌,谷歌现在进不去了,那就翻墙吧。 好了,首先我们还是如…

Cfree5可以JAVA_C语言中free函数的使用详解

free函数是我们再写C语言程序时常用的函数,但是使用时需要注意,一不小心很肯能会引起吐核。 注意:free函数与malloc()函数配对使用,释放malloc函数申请的动态内存。对于free(p)这句语句,如果p 是NULL 指针,…

在Cfree5里使用多行快捷注释的方法

1.打开cfree5,点击上方 工具 选项。 2.点击 工具 选项后,进入“环境选项” 3.进入环境选项后就会发现上方有四个选项,点击“快捷键”这个选项,里面会出现很多操作的快捷键,往下翻就能找到快捷多行注释的选项了 4.此时点…

配置cfree 5 支持C++11

最近想学c的一些用法,但Cfree并不支持,所以在大牛的帮助下配置了一下cfree。 c-free5.0版本已经可以支持c99标准。由于CFree5.0自带的GCC版本只有3.4.0,并不支持C11,所以首先得去下载完整支持C11的4.8.1版本——TDM-GCC-64&#x…

C语言基础入门:C-Free5新建C语言工程

C语言 基础开发----目录 步骤1:打开软件 双击打开C-Free 5 步骤2:新建工程 当打开C-Free5软件的时候,就会弹出以下界面,点击新建工程。 如果没有弹出以上界面,就使用以下方法新建工程。 创建工程名字&#xff0c…

BDD100K数据集高速下载地址(百度网盘)

最近需要BDD100K的数据集,在网上找了好久下载地址,大部分要么不能用,要么下到一半就禁止下载了,气煞我也,还让我加什么qq群,加群,不可能,必须拒绝,因此在找到后第一个和小…

【BDD】BDD入门和工具对比

行为驱动开发(英语:Behavior-driven development,缩写BDD)是一种敏捷软件开发的技术,它鼓励软件项目中的开发者、QA和非技术人员或商业参与者之间的协作。BDD最初是由Dan North在2003年命名[1],它包括验收测…

说起BDD,你会想到什么?

在刚接触BDD(Behavior Driven Development,行为驱动开发)的时候,我以为就是用Cucumber这样的工具来编写场景用例,从而实现自动化测试,甚至很长时间分不清BDD和ATDD(Acceptance test driven development)到底…

BDD - Specflow BDD 执行测试,生成测试报告 VSTest 篇

BDD - Specflow BDD 执行测试,生成测试报告 VSTest 篇 引言VSTest.Console.exe 命令启动命令选项 VSTest.Console.exe 执行测试NUnit 项目MSTest 项目Xunit 项目SpecRun 项目 Specflow 生成测试报告specflow.exe 命令生成 NUnit 项目测试报告生成 MSTest 项目测试报…

行为驱动开发(BDD)你准备好了吗?

GitChat 作者:冰尘 原文:行为驱动开发(BDD)你准备好了吗? 关注微信公众号:「GitChat 技术杂谈」 一本正经的讲技术 【不要错过文末彩蛋】 这个Chat笔者将会和大家一起探讨下面的主题: 什么是…

BDD - SpecFlow BDD 测试实践 SpecFlow + Xunit

BDD - SpecFlow BDD 测试实践 SpecFlow Xunit 引言创建一个 .NET Framework 项目添加 SpecFlow package添加支持 xUnit NuGet 包App.config 和 packages.config 的变化创建 Spec feature 文件创建 step definition 文件创建一个被测类文件实现 steps执行测试 引言 BDD - Spec…

漫画 | 被TDD/BDD/DDD......“逼疯”的程序员

作为一个程序员,你需要学习编程语言和编程框架。 虽然有些难度,但是你最终能掌握它们,顺利地写出应用程序。 但是,编程行业总是有一些东西,看起来很美,很简单, 但非常难于掌握。 你会理解TDD/DD…

基于BDD的接口自动化框架开箱即用

1、背景说明 项目思想:BDD 行为驱动开发的思想褒贬不一,这里不多说。遵循的宗旨能解决业务痛点的思想就是好思想。 接口测试工具在实际的业务测试场景中往往会遇到一些使用上的局限性,自定义扩展要求技术较高,如果二次开发工具…

BDD之单元测试(三):BDD的官方教程

BDD之单元测试(二):ATDD,TDD,BDD的区别 BDD之单元测试(三):BDD的官方教程 BDD之单元测试(四):实际的项目教程 cucumber cucumber是BDD(Behav…

五分钟让你彻底了解TDD、ATDD、BDDRBE

在目前比较流行的敏捷开发模式(如极限编程、Scrum方法等)中,推崇“测试驱动开发(Test Driven Development,TDD)”——测试在先、编码在后的开发实践。TDD有别于以往的“先编码、后测试”的开发过程&#xf…