找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 366|回复: 1
打印 上一主题 下一主题
收起左侧

C语言结构体数组中sys_ctr_sys.preNum存入708三位数分拆时丢失0?

[复制链接]
跳转到指定楼层
楼主
ID:645031 发表于 2025-4-25 09:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. //将整数各位取出存放数组
  2. //num: 转换的整数
  3. //buf: 转换后存储到数组内
  4. //返回值: 整数的长度
  5. unsigned char int_to_array(unsigned int num)
  6. {
  7.         unsigned char cnt = 0;

  8.         if(num != 0)                //        传入的数据不为0
  9.         {
  10.                 while(num != 0)
  11.                 {
  12.                         num /= 10;                                                        //num = 789
  13.                         cnt ++;                                                                                //记录这个数是几位数
  14.                 }
  15.         }
  16.         else                //传入的数据为0
  17.                 cnt ++;
  18.         return cnt;
  19. }


  20. //获取第1个计算书并显示
  21. void get_pre_num_show(void)
  22. {
  23.         unsigned char tempbuf[SMG_SHOW_BITNUM] = {0};        //保存数码管显示
  24.         unsigned char key_cnt;                                                                //存储按键按下的次数
  25. //        unsigned char j;                                                                                        //循环变量
  26.         unsigned char b;
  27.         unsigned char SIGN;
  28.         unsigned int Num;                                                                                                //获取矩阵按键的按键值
  29.         
  30.         while(1)
  31.         {
  32.                 if(key_cnt == 0)                //还未输入数,显示0
  33.                 {
  34.                         DisplayData[0] = 0;
  35.                 }
  36.                         
  37.                 //8位输入有效
  38.                 Num = Key_GetState();
  39.                 if(key_cnt == 0 && Num !=16)
  40.                         DisplayData[0] = 16;
  41.                 if(key_cnt < SMG_SHOW_BITNUM)
  42.                 {
  43.                         //获取0~9数值
  44.                         switch(Num)
  45.                         {
  46.                                 //7,8,9
  47.                                 case 0:
  48.                                 case 1:
  49.                                 case 2: tempbuf[key_cnt] = Num + 7;Display(tempbuf[key_cnt]);sys_ctr_sys.preNum = sys_ctr_sys.preNum*10 + (Num + 7);
  50.                                                                 key_cnt ++;break;
  51.                                 //5,6,7
  52.                                 case 4:
  53.                                 case 5:
  54.                                 case 6: tempbuf[key_cnt] = Num;Display(tempbuf[key_cnt]);sys_ctr_sys.preNum = sys_ctr_sys.preNum*10 + Num;
  55.                                                                 key_cnt ++;break;
  56. //                                //1,2,3
  57.                                 case 8:
  58.                                 case 9:
  59.                                 case 10: tempbuf[key_cnt] = Num - 7;Display(tempbuf[key_cnt]);sys_ctr_sys.preNum = sys_ctr_sys.preNum*10 + (Num - 7);
  60.                                                                 key_cnt ++;break;
  61.                                 //第一个输入显示0,则后面再输入0还是显示0
  62.                                 case 12:if(key_cnt == 0)
  63.                                                                         tempbuf[key_cnt] = Num - 12;
  64.                                                                 else
  65.                                                                 {
  66.                                                                         tempbuf[key_cnt] = Num - 12;Display(tempbuf[key_cnt]);
  67.                                                                         key_cnt ++;
  68.                                                                 }
  69.                                                                 break;
  70. //                                //清零
  71.                                 case 13:key_cnt = 0;
  72.                                                                 for(b = 0;b < SMG_SHOW_BITNUM;b++)
  73.                                                                 {
  74.                                                                         tempbuf[b] = 0;
  75.                                                                 }
  76.                                                                 DisplayClear();
  77.                                                                 SIGN = 0;
  78.                                                                 break;
  79.                                 //符号
  80.                                 case 3:DisplayClear();SIGN = 1;sys_ctr_sys.sign = SIGN_ADD;DisplayData[0] = 10;break;                // +        A
  81.                                 case 7:DisplayClear();SIGN = 2;sys_ctr_sys.sign = SIGN_MIN;DisplayData[0] = 11;break;                // -        B
  82.                                 case 11:DisplayClear();SIGN = 3;sys_ctr_sys.sign = SIGN_MUL;DisplayData[0] = 12;break;                // *        C
  83. //                                case 14:DisplayClear();SIGN = 5;sys_ctr_sys.sign = SIGN_EQUAL;DisplayData[0] = 14;break;        // =        E
  84.                                 case 15:DisplayClear();SIGN = 4;sys_ctr_sys.sign = SIGN_DIV;DisplayData[0] = 13;break;                // /        D
  85.                                 default:break;
  86.                         }
  87. //                        smg_display(smgbuf,SMG_SHOW_BITNUM + 1 - key_cnt);               
  88.                 }

  89.                 if(SIGN != 0)  //有符合键按下
  90. //                {
  91. //                        for(j = 0;j<key_cnt; j++)                //将数组内数整合为一个整数
  92. //                        {
  93. //                                sys_ctr_sys.preNum += tempbuf[j]*num_pow(10,key_cnt - 1 - j);        //789=0+7*10^2+8*10^1+9
  94. //                        }
  95. ////                                sys_ctr_sys.preNum += sys_ctr_sys.curNum;//?
  96.                         break;
  97. //                }        
  98.         }
  99. }

  100. void get_num_show()
  101. {
  102.    unsigned int tempbuf[SMG_SHOW_BITNUM] = {0};        //保存数码管显示
  103.    unsigned char bitnum;   
  104.    long rnum;
  105.    unsigned char j;                                                                                        //循环变量
  106.    long n;
  107.    unsigned char i;

  108.    DisplayData[0] = 16;
  109.    Delay2000ms();
  110.    bitnum = int_to_array(sys_ctr_sys.preNum);   //789,bitnum = 3;
  111.    rnum = sys_ctr_sys.preNum;


  112.    if(rnum != 0)                //        传入的数据不为0
  113.    {
  114.       i=bitnum -1;
  115.       while(rnum != 0)
  116.       {
  117.          n = rnum % 10;
  118.          if(n == 0)
  119.          tempbuf[i] = 0;
  120.          else
  121.          tempbuf[i] = n;        //将各个位的数赋值于数组tempbuf[j],789

  122.          rnum /= 10;                                                        //现在数组tempbuf[j]记录的是各个位上的数的反序

  123.          i--;
  124.       }
  125.    }
  126.    for(j = 0;j < bitnum;j ++)
  127.    {
  128.       Display(tempbuf[j]);
  129.    }
  130.     while(1);
  131. }
复制代码


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:108361 发表于 2025-4-25 15:44 | 只看该作者
结构体声明在哪?
回复

使用道具 举报

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

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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