iT邦幫忙

0

MCU C code 判斷式寫法

各位好
最近在寫一組根據速度判斷該亮指示的功能
由於速度和距離會形成一張表格並表格中會有對應值
ex
SPEED1 SPEED2 SPEED3 ... SPEED10
V1 A11 A12 A13
V2 A21 A22 A23
V3 A31 A32 A33
.
.
.
V10
如果以判斷式if(V1<V<V2){} else if(V2<V<V3)....這種寫法
太過冗長不漂亮(功能是可以達到沒錯),且執行速度多少會有影響(我有至少100組要判斷)
想請教有無更好更精簡、執行更快的寫法

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

1
wrxue
iT邦好手 1 級 ‧ 2020-11-23 10:14:04
最佳解答

所有範圍都幫你照顧到了,該做的事就放在handler內吧

int V1 = 100, V2 = 200, V3 = 300;
int V[3] = { V1, V2, V3 };
const int length = sizeof(V) / sizeof(V[0]);

void handler(int i) {
	switch (i)
	{
	case 0:
		printf("0 < V <= %d\n", V[i]);
		break;
	case length:
		printf("%d < V\n", V[i - 1]);
		break;
	default:
		printf("%d < V <= %d\n", V[i - 1], V[i]);
		break;
	}
}

int main()
{
	int currentV = 200;
	int i = 0;

	for (i = 0; i < length; i++) {
		if (currentV - V[i] <= 0) {
			break;
		}
	}
	handler(i);

	system("PAUSE");
}
看更多先前的回應...收起先前的回應...
zhoyo99 iT邦新手 5 級 ‧ 2020-11-23 10:31:57 檢舉

length用sizeof(V) / sizeof(V[0])
我的v要超過4byte,length才會有變化吧

wrxue iT邦好手 1 級 ‧ 2020-11-23 10:33:36 檢舉

不懂你的意思
方便舉例嗎

zhoyo99 iT邦新手 5 級 ‧ 2020-11-23 11:04:55 檢舉

沒事,是我看錯了!!!沒問題,謝謝你
另外我想請問,如果是這樣的話,用四捨五入是否更簡單?

wrxue iT邦好手 1 級 ‧ 2020-11-23 11:11:52 檢舉

四捨五入要用在哪裡@_@

我要發表回答

立即登入回答