如何比较整数数组?

发布于 2024-11-01 17:44:56 字数 540 浏览 0 评论 0原文

我有四个传感器 (sen0-sen3),它们返回 10,并且我正在使用 sprintf 创建一个值数组。然后我尝试将它们与 00001000 等进行比较。

我的问题是,即使 sen_array 的值为 1000,它也永远不会进入 else if 条件(直接到 else代码>条件)。

char sen_array[4];

sprintf(sen_array,"%d%d%d%d",sen0,sen1,sen2,sen3);
if(strcmp("0000",sen_array)==0)
{
    motor_pwm((156*(0.20).),(156*(0.20)));
}
else if(strcmp("1000",sen_array)==0)
{
    motor_pwm((156*(0.40)),(156*(0.40)));
}
else
{
    motor_pwm((156*(0.80)),(156*(0.80)));
}

I have four sensors (sen0-sen3) which return either 1 or 0 and I am making an array of values using sprintf. Then I am trying to compare them with 0000 or 1000 and so on.

My Problem is even if the value of sen_array is 1000, it never goes into the else if condition (straight to else condition).

char sen_array[4];

sprintf(sen_array,"%d%d%d%d",sen0,sen1,sen2,sen3);
if(strcmp("0000",sen_array)==0)
{
    motor_pwm((156*(0.20).),(156*(0.20)));
}
else if(strcmp("1000",sen_array)==0)
{
    motor_pwm((156*(0.40)),(156*(0.40)));
}
else
{
    motor_pwm((156*(0.80)),(156*(0.80)));
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

迷雾森÷林ヴ 2024-11-08 17:44:56

您所看到的是内存损坏的产物。问题是您已将 sen_array 声明为 char[4],它没有为终止 null 留下空间。将 sen_array 更改为:

char sen_array[5];

What you're seeing is an artifact of memory corruption. The problem is that you've declared sen_array to be a char[4], which doesn't leave room for a terminating null. Change sen_array to:

char sen_array[5];
无尽的现实 2024-11-08 17:44:56

不使用 STL,我认为比较整数数组的最佳方法是使用比较内存块的 memcmp 函数。

int sen_array1[] = { 1, 2, 3, 4 } ;
int sen_array2[] = { 1, 2, 3, 4 } ;
if(memcmp(sen_array1, sen_array2, sizeof(int)*4) == 0) { /* do something */ }

Not using STL, I think the best way to compare integer arrays is using the memcmp function which compares blocks of memory.

int sen_array1[] = { 1, 2, 3, 4 } ;
int sen_array2[] = { 1, 2, 3, 4 } ;
if(memcmp(sen_array1, sen_array2, sizeof(int)*4) == 0) { /* do something */ }
明天过后 2024-11-08 17:44:56

您的 sen_array 应至少有 5 个字符长 - 以便为 0 终止符腾出空间。

char sen_array[4];
sprintf(sen_array, "%d%d%d%d", 1, 2, 3, 4);

上面将 '1' '2' '3' '4' '\0' 写入 sen_array - 使其溢出并可能影响附近的变量

Use char sen_array[5];

也许更好的解决方案是使用整数:

int sa = sen0 * 1000 + sen1 * 100 + sen2 * 10 + sen3;

if (sa == 1000) {
  ...
} else if (sa == 1001) {
  ...
}

Your sen_array should be at least 5 chars long - to make room for a 0-terminator.

char sen_array[4];
sprintf(sen_array, "%d%d%d%d", 1, 2, 3, 4);

The above writes '1' '2' '3' '4' '\0' to sen_array - overflowing it and perhaps affecting a nearby variable

Use char sen_array[5];

A perhaps better solution would be to work with an integer:

int sa = sen0 * 1000 + sen1 * 100 + sen2 * 10 + sen3;

if (sa == 1000) {
  ...
} else if (sa == 1001) {
  ...
}
苦妄 2024-11-08 17:44:56

我认为 sen_array 应该至少有 5 个字符长,除非您将 sen_array 用于其他用途,更好更快的方法是使用

int res = 1000*sen0+100*sen1+10*sen2+sen3;

它进行比较。

I think sen_array should be atleast 5 chars long and unless you are using the sen_array for something else, A better and faster way is to do

int res = 1000*sen0+100*sen1+10*sen2+sen3;

And use this to compare.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文