帮我完善这段代码if(key_val<10 && key_val >0) { OldS=Set_Dis[Set_Wei]; Set_Dis[Set_Wei]=key_val; i_S = 0; j_S = 1; } if(j_S==1) { if(Set_Wei<3) { TmpS=Set_Dis[0]*100+Set_Dis[1]*10+Set_Dis[2]; printf("123 %d ,%d \r\n",TV_X,Set_Wei); if((TmpS>320)) i_S=1; else { TV_X = TmpS; } } } if(i_S==1) { Set_Dis[Set_Wei] = OldS; } else { if(Set_Wei<3) Set_Wei=Set_Wei+1;// 往后递推; else Set_Wei=0; }
时间: 2024-02-15 14:04:17 浏览: 25
根据代码注释的功能描述,你可能需要完善这段代码的输入数字限制和错误处理。具体操作如下:
1. 输入数字限制
在 if(key_val<10 && key_val >0) 的条件语句中,已经限制了输入数字必须在 1-9 之间。但是,如果 Set_Dis 数组中已经有了一个数字,输入的第二个数字就不能再是相同的数字。你可以添加如下代码来实现:
```
int flag = 0;
for(int k=0;k<Set_Wei;k++){
if(Set_Dis[k]==key_val){
flag = 1;
break;
}
}
if(flag==1) continue;
```
这段代码会遍历 Set_Dis 数组中已经存储的数字,如果发现输入的数字与已经存储的数字相同,就将标志位 flag 设置为 1,并直接跳过本次循环,等待下一次输入。
2. 错误处理
在组合三个数字成为 TmpS 后,需要判断 TmpS 是否大于 320。如果 TmpS 大于 320,则需要将最新输入的数字从数组中删除。但是,如果 Set_Dis 数组中没有数字,则不能执行删除操作。你可以添加如下代码来实现:
```
if(Set_Wei==0) i_S = 1;
```
这段代码会在判断 TmpS 大于 320 之前,先判断 Set_Dis 数组中是否有数字。如果 Set_Dis 数组中没有数字,就将 i_S 设置为 1,表示无法组合成有效的三位数,需要将最新输入的数字从数组中删除。
相关问题
完善以下代码 if(key_val<10 && key_val >0) { OldS=Set_Dis[Set_Wei]; Set_Dis[Set_Wei]=key_val; i_S = 0; j_S = 1; } if(j_S==1) { if(Set_Wei<3) { TmpS=Set_Dis[0]*100+Set_Dis[1]*10+Set_Dis[2]; printf("123 %d ,%d \r\n",TV_X,Set_Wei); if((TmpS>320)) i_S=1;//||(TmpS<=Start_Y) else { TV_X = TmpS; } } }
根据代码的逻辑,这是一段嵌入式系统中的代码,用于读取用户在键盘上输入的数字,并将其存储到Set_Dis数组中,最终转换成一个三位数并存储到TV_X变量中。不过,从代码中看到,Set_Wei变量的值可能会超过数组的下标范围,这可能会导致程序崩溃。因此,需要添加一个判断,以确保Set_Wei的值不会超过数组下标的范围。
以下是完善后的代码:
```
if(key_val < 10 && key_val > 0) {
if(Set_Wei < 3) { // 判断Set_Wei是否超过了数组下标的范围
OldS = Set_Dis[Set_Wei];
Set_Dis[Set_Wei] = key_val;
i_S = 0; j_S = 1;
Set_Wei++; // 将Set_Wei的值加1
}
}
if(j_S == 1) {
if(Set_Wei == 3) { // 如果Set_Wei等于3,则将Set_Wei的值重置为0
Set_Wei = 0;
TmpS = Set_Dis[0] * 100 + Set_Dis[1] * 10 + Set_Dis[2];
printf("123 %d ,%d \r\n", TV_X, Set_Wei);
if(TmpS > 320) {
i_S = 1; // 如果TmpS的值大于320,则将i_S的值设置为1
} else {
TV_X = TmpS; // 否则将TV_X的值设置为TmpS的值
}
}
}
```
在完善后的代码中,添加了对Set_Wei变量的判断,确保其值不会超过数组下标的范围,同时增加了对Set_Wei变量的自增操作,以便下一次读取用户输入时能够存储到正确的数组下标中。
template <class _Ty, class _Other = _Ty> _CONSTEXPR20 _Ty exchange(_Ty& _Val, _Other&& _New_val) noexcept( conjunction_v<is_nothrow_move_constructible<_Ty>, is_nothrow_assignable<_Ty&, _Other>>) { // assign _New_val to _Val, return previous _Val _Ty _Old_val = static_cast<_Ty&&>(_Val); _Val = static_cast<_Other&&>(_New_val); return _Old_val; }解释这段代码
这段代码实现了一个名为`exchange`的函数模板,用于将一个对象的值替换为另一个值,并返回替换前的值。
以下是代码的解释:
```cpp
template <class _Ty, class _Other = _Ty>
_CONSTEXPR20 _Ty exchange(_Ty& _Val, _Other&& _New_val)
noexcept(conjunction_v<is_nothrow_move_constructible<_Ty>,
is_nothrow_assignable<_Ty&, _Other>>)
{
// assign _New_val to _Val, return previous _Val
_Ty _Old_val = static_cast<_Ty&&>(_Val); // 将_Val强制转换为_Ty&&,即右值引用类型,并绑定到_Old_val上
_Val = static_cast<_Other&&>(_New_val); // 将_New_val强制转换为_Other&&,即右值引用类型,并赋值给_Val
return _Old_val; // 返回_Old_val,即_Val原本的值
}
```
`exchange`函数接受两个参数,第一个
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)