谁可以帮我解释一下这个C语言的设计构造或思路吗?,大概就是讲解一下这段删除程序是咋做出来的,报告提问,

img


谁可以帮我解释一下这个C语言的设计构造或思路吗?,大概就是讲解一下这段删除程序是咋做出来的,报告提问,

详细逻辑
1、获取输入文本
2、判断输入是否是0,如果是0,直接结束函数
3、进行循环遍历,
第一个if先不管,刚开始flag=0会一直跳过
先看第二个if,如果bo数组里的这个元素跟你输入的收支编号一致,那么就flag=1,
也就是你定位到了bo数组中这个跟你输入的收支编号一致的位置。

4、flag=true之后,第三个if和第一个if都会触发,
所以bs个数减一,bo数组向后移动一位,
也就是将你定位到的那个收支编号对应的元素给删除了,其余的元素往前移动
简单来说就是数组中某个元素删去,数组该元素后边的位置往前移动一位。

整理逻辑:
大概就是先定位输入的值在数组中的元素位置,
然后删除该元素,其他元素前移进行填充。

基本逻辑和整体就是这些。

如有问题及时沟通

存在全局变量,bo(结构体数组?)和bs(长度?),if(strcmp(str,bo[i].num)==0){flag=1}定位当前账单所在位置。if(flag==1) b0[i-1]=b[i],后面元素往前移一个位置,第一元素被删除,后续元素前移一个位置。bs--,数组有效长度减一。

定义i,j,flag变量
str字符串数组
清屏
打印请输入您要删除的收支编号(输入0直接返回):)
scanf("%s",&str);      输入编号
if(strcmp("0",str == 0){                和0比较,等于0直接返回
return;
}
下面的bs变量你在哪定义的啊?

bo和bs是什么? 猜测bo[]是收支记录数组, bs是数组长度:
设计思路是这样的:

  1. 在命令行获取要删除的收支编号放在str变量中.
  2. 如果是0就退出
  3. 对数组进行遍历, flag用于指示当前数组元素是否要删除, 初始设置为不删除, 遍历时当找到相同编号时将flag置为1, 将其后的所有元素都前移一位, 这样就删除了指定记录.

这个设计思路不好, 效率低

  • 遍历找到需要删除元素的位置,删除它
  • 将后面的数据批量往前移动

基本就是这个思路