在C语言中,比较一个结构的2个成员

时间:2017-06-12 18:01:39

标签: c struct compare

我似乎在比较一个结构的2个成员时遇到了麻烦。 我可以在监视窗口看到所有日志中的序列都是0x000。

此评估将AllLogsNotZero评估为TRUE

for (i=0;(i<(3)&&(!AllLogsNotZero));i++)
   {
       UINT8 j;
       j=i+1;
       UINT16* comp1;
       UINT16* comp2;
       comp1 = (UINT16*) (&Data.log[i].Sequence);
       comp2 = (UINT16*) (&Data.log[j].Sequence);
       if ((Data.log[i].Sequence == Data.log[j].Sequence) == 0)
            AllLogsNotZero=FALSE;
       else
            AllLogsNotZero=TRUE;

这个评估AllLogsNotZero为FALSE

for (i=0;(i<(3)&&(!AllLogsNotZero));i++)
   {
       UINT8 j;
       j=i+1;
       UINT16* comp1;
       UINT16* comp2;
       comp1 = (UINT16*) (&Data.log[i].Sequence);
       comp2 = (UINT16*) (&Data.log[j].Sequence);
       if (Data.log[i].Sequence == Data.log[j].Sequence)
            AllLogsNotZero=FALSE;
       else
            AllLogsNotZero=TRUE;

我不知道为什么。

3 个答案:

答案 0 :(得分:3)

我认为你是在一个小山丘上建造一座山。我认为我使用您当前的变量名称编写循环的方式是:

bool AllLogsNotZero = true;
for (int i = 0; i < 4; i++)
{
    if (Data.log[i].Sequence == 0)
    {
        AllLogsNotZero = false;
        break;
    }
}
if (AllLogsNotZero)
    …processing option for no zero logs
else
    …processing option for at least one log zero

我们可以讨论循环限制应该是3还是4(或其他一些值);您的代码并未完全清楚,但是您将j设置为i+1并使用它,并将i限制为< 3,因此当代码没有&#时39; t使用i+1,限制应该是4.最好有一个枚举值或#define限制值 - 这个名称会表明你的测量结果优于只是数字。

名称中的否定(AllLogsNotZero)也使生活更加艰难;尽可能避免。例如:

bool LogsZero = false;
for (int i = 0; i < 4; i++)
{
    if (Data.log[i].Sequence == 0)
    {
        LogsZero = true;
        break;
    }
}
if (LogsZero)
    …processing option for at least one log zero
else
    …processing option for no zero logs

答案 1 :(得分:2)

查看陈述

首先检查:

//You check if they are the same
if (Data.log[i].Sequence == Data.log[j].Sequence)

第二次检查

//You check if they are not the same
if ((Data.log[i].Sequence == Data.log[j].Sequence) == 0)

//Can be evaluated as:
if (Data.log[i].Sequence != Data.log[j].Sequence)

答案 2 :(得分:0)

for (i=0;(i<(3)&&(!AllLogsNotZero));i++)
   {
       UINT16 Var1 = 0;

       if (Data.log[i].Sequence == Var1)
            AllLogsNotZero=FALSE;
       else
            AllLogsNotZero=TRUE;

这有效!!