标题:
C语言结构体数组中sys_ctr_sys.preNum存入708三位数分拆时丢失0?
[打印本页]
作者:
3602755618
时间:
2025-4-25 09:37
标题:
C语言结构体数组中sys_ctr_sys.preNum存入708三位数分拆时丢失0?
//将整数各位取出存放数组
//num: 转换的整数
//buf: 转换后存储到数组内
//返回值: 整数的长度
unsigned char int_to_array(unsigned int num)
{
unsigned char cnt = 0;
if(num != 0) // 传入的数据不为0
{
while(num != 0)
{
num /= 10; //num = 789
cnt ++; //记录这个数是几位数
}
}
else //传入的数据为0
cnt ++;
return cnt;
}
//获取第1个计算书并显示
void get_pre_num_show(void)
{
unsigned char tempbuf[SMG_SHOW_BITNUM] = {0}; //保存数码管显示
unsigned char key_cnt; //存储按键按下的次数
// unsigned char j; //循环变量
unsigned char b;
unsigned char SIGN;
unsigned int Num; //获取矩阵按键的按键值
while(1)
{
if(key_cnt == 0) //还未输入数,显示0
{
DisplayData[0] = 0;
}
//8位输入有效
Num = Key_GetState();
if(key_cnt == 0 && Num !=16)
DisplayData[0] = 16;
if(key_cnt < SMG_SHOW_BITNUM)
{
//获取0~9数值
switch(Num)
{
//7,8,9
case 0:
case 1:
case 2: tempbuf[key_cnt] = Num + 7;Display(tempbuf[key_cnt]);sys_ctr_sys.preNum = sys_ctr_sys.preNum*10 + (Num + 7);
key_cnt ++;break;
//5,6,7
case 4:
case 5:
case 6: tempbuf[key_cnt] = Num;Display(tempbuf[key_cnt]);sys_ctr_sys.preNum = sys_ctr_sys.preNum*10 + Num;
key_cnt ++;break;
// //1,2,3
case 8:
case 9:
case 10: tempbuf[key_cnt] = Num - 7;Display(tempbuf[key_cnt]);sys_ctr_sys.preNum = sys_ctr_sys.preNum*10 + (Num - 7);
key_cnt ++;break;
//第一个输入显示0,则后面再输入0还是显示0
case 12:if(key_cnt == 0)
tempbuf[key_cnt] = Num - 12;
else
{
tempbuf[key_cnt] = Num - 12;Display(tempbuf[key_cnt]);
key_cnt ++;
}
break;
// //清零
case 13:key_cnt = 0;
for(b = 0;b < SMG_SHOW_BITNUM;b++)
{
tempbuf[b] = 0;
}
DisplayClear();
SIGN = 0;
break;
//符号
case 3:DisplayClear();SIGN = 1;sys_ctr_sys.sign = SIGN_ADD;DisplayData[0] = 10;break; // + A
case 7:DisplayClear();SIGN = 2;sys_ctr_sys.sign = SIGN_MIN;DisplayData[0] = 11;break; // - B
case 11:DisplayClear();SIGN = 3;sys_ctr_sys.sign = SIGN_MUL;DisplayData[0] = 12;break; // * C
// case 14:DisplayClear();SIGN = 5;sys_ctr_sys.sign = SIGN_EQUAL;DisplayData[0] = 14;break; // = E
case 15:DisplayClear();SIGN = 4;sys_ctr_sys.sign = SIGN_DIV;DisplayData[0] = 13;break; // / D
default:break;
}
// smg_display(smgbuf,SMG_SHOW_BITNUM + 1 - key_cnt);
}
if(SIGN != 0) //有符合键按下
// {
// for(j = 0;j<key_cnt; j++) //将数组内数整合为一个整数
// {
// sys_ctr_sys.preNum += tempbuf[j]*num_pow(10,key_cnt - 1 - j); //789=0+7*10^2+8*10^1+9
// }
//// sys_ctr_sys.preNum += sys_ctr_sys.curNum;//?
break;
// }
}
}
void get_num_show()
{
unsigned int tempbuf[SMG_SHOW_BITNUM] = {0}; //保存数码管显示
unsigned char bitnum;
long rnum;
unsigned char j; //循环变量
long n;
unsigned char i;
DisplayData[0] = 16;
Delay2000ms();
bitnum = int_to_array(sys_ctr_sys.preNum); //789,bitnum = 3;
rnum = sys_ctr_sys.preNum;
if(rnum != 0) // 传入的数据不为0
{
i=bitnum -1;
while(rnum != 0)
{
n = rnum % 10;
if(n == 0)
tempbuf[i] = 0;
else
tempbuf[i] = n; //将各个位的数赋值于数组tempbuf[j],789
rnum /= 10; //现在数组tempbuf[j]记录的是各个位上的数的反序
i--;
}
}
for(j = 0;j < bitnum;j ++)
{
Display(tempbuf[j]);
}
while(1);
}
复制代码
作者:
powerdruy
时间:
2025-4-25 15:44
结构体声明在哪?
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1