起初我会发布所需的代码。
#define STRING_LEFT "05000858FB"
#define STRING_RIGHT "05000B3E45"
#define STRING_LENGTH_MAX 16
char stringname[STRING_LENGTH_MAX+1];
if(strcmp(stringname, STRING_LEFT)==0)
{
// do stuff A here
}
else if(strcmp(stringname, STRING_RIGHT)==0)
{
// do stuff B here
}
stringname是通过传输十六进制值的传感器触发的,需要与STRING_LEFT和STRING_RIGHT进行比较,然后进行不同的操作。当stringname和STRING_LEFT相等(== 0)时,它会执行操作A.如果我下次激活STRING_RIGHT,它会再次激活A.当我第二次使用RIGHT时,它会执行B.如果我再次使用LEFT,它会B,第二次A.所以功能总是像'一事件后面'......我不想拥有它。我怎么能避免这个?
TIA
答案 0 :(得分:3)
我认为你的代码中有一个重要的错字:
else if(stringname(stringname, STRING_RIGHT)==0)
应该是
else if(strcmp(stringname, STRING_RIGHT)==0)
(除非stringname也是一个除变量之外的函数;在这种情况下你应该发布那个代码,但那将是糟糕的做法)
答案 1 :(得分:1)
我认为你正在尝试做以下事情:
#include <string.h>
#include <stdio.h>
#define STRING_LEFT "05000858FB"
#define STRING_RIGHT "05000B3E45"
#define STRING_LENGTH_MAX 16
#define STRING_TO_COMPARE "05000858FB"
int main()
{
char stringname[STRING_LENGTH_MAX+1];
/* initialize the string to compare */
strcpy(stringname, STRING_TO_COMPARE);
if(strcmp(stringname, STRING_LEFT)==0)
{
// do stuff A here
}
/* call strcmp */
else if(strcmp(stringname, STRING_RIGHT)==0)
{
// do stuff B here
}
return 0;
}
在该示例中,stringname
包含与STRING_LEFT
相同的字符串,因此程序将执行stuff B
。
当然,您必须使用所需的字符串设置stringname
。