我正在尝试解决一个问题:当我使用我的函数时,编译器会跳过调用它。 我尝试在调试器中单步执行我的程序,但它跳过函数调用跳转。
为什么跳过函数调用?
我这样做:
void VoltageToPercent(short int Voltage, short int output){
if((Voltage < 400) | (Voltage > 300)){
output = 10;
}
else if((Voltage > 700)|(Voltage < 850) ){
output = 20;
}
else if((Voltage > 1100)|(Voltage < 1300) ){
output = 30;
}
else if((Voltage > 1400)|(Voltage < 1800)){
output = 40;
}
else if((Voltage > 1900)|(Voltage < 2200) ){
output = 50;
}
else if((Voltage > 2300)|(Voltage < 2700) ){
output = 60;
}
else if((Voltage > 2700)|(Voltage < 3100)){
output = 70;
}
else if((Voltage > 3200) | (Voltage < 3600)){
output = 80;
}
else if((Voltage > 3300) | (Voltage < 4100)){
output = 90;
}
else if((Voltage > 4200) | (Voltage < 4600)){
output = 100;
}
}
答案 0 :(得分:1)
代码行有两个问题,如:
pi
1)单个if((Voltage < 400) | (Voltage > 300)){
是二进制或,这不是您想要的。如果你想要一个逻辑或做|
2)然而,逻辑是错误的。它永远都是真的。您写道:&#34;如果数字小于400或大于300&#34;。所有数字都满足!所以表达式总是如此。
你可能想要逻辑和(||
),如:
&&
答案 1 :(得分:1)
这里有些不对劲。首先,正如sg7所说,你正在使用二进制OR,而不是你应该使用的逻辑OR ||。不同的是二进制OR将取位,并对它们应用OR运算。例如:
(01001) | (01010)
将导致
01011
但你想要的是逻辑运算符。因此,您只需添加另一个管道,使其看起来像Voltage > 5 || Voltage < 10
。
但是,我猜你的程序,你不想问它是否大于700或小于850,而是它是否大于700且更少而不是850.我猜你在做什么,它的跳过是第一次操作将永远解决为真。无论您选择什么号码,它总是小于400,或大于300。
所以你想要的是if(Voltage < 400 && Voltage > 300)
每当你遇到这些问题时,只需插入一个号码并亲自浏览一下程序,答案就会非常明显!
希望这有帮助。
编辑:以下是很多可以帮助你的C运营商:https://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B#Logical_operators