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



我似乎在比较结构的 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;

我不知道为什么。

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

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(或其他值(;从你的代码中并不完全清楚,但你设置ji+1并使用它,并将i限制为 < 3,所以当代码不使用 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

查看if语句

第一次检查:

//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)
for (i=0;(i<(3)&&(!AllLogsNotZero));i++)
   {
       UINT16 Var1 = 0;
       if (Data.log[i].Sequence == Var1)
            AllLogsNotZero=FALSE;
       else
            AllLogsNotZero=TRUE;

这行得通!!

相关内容

  • 没有找到相关文章

最新更新