在没有语法错误的情况下,此代码中的 if 情况不起作用
Posted
技术标签:
【中文标题】在没有语法错误的情况下,此代码中的 if 情况不起作用【英文标题】:the if case in this code doesnt work while there is no syntax error 【发布时间】:2016-08-11 13:27:47 【问题描述】:if(s.name=="kolkata")
printf("the details");
if(strcmp((s.name,"kolkata")==0)
printf("the details");
第一个'if' case没有语法错误仍然不起作用,而第二个'if' case确实很有效,为什么?
【问题讨论】:
你没有在第一个 if 情况下使用 strcmp,这就是原因。没有语法错误是必要的,但还不够。 因为第一个 if 语句比较对象和对象并且它们是不同的对象。第二个 if 是比较对象的内容。 因为第二个语句在语法上不正确。您从哪里获得第二个效率不高的“信息”?你从来没有运行过这段代码,所以你从来没有测量过它的性能,不是吗? 【参考方案1】:这不像第一种情况根本不起作用,它只是以一种不打算的方式起作用。
根据代码,
if(s.name=="kolkata")
尝试比较指针本身。它不会通过这些指针比较内存位置指针的内容。
到了您所期望的地步语法错误,引用C11
,第6.5.9 章,相等运算符的约束,(==
)
两个操作数都是指向兼容类型的合格或不合格版本的指针;
所以,
if(s.name=="kolkata")
从句法的角度来看,是完全有效且合法的 C 代码。从逻辑上讲,当您期望通过指针比较内存区域指针的内容时,这段代码是无用的,没有意义。
【讨论】:
如果输入是“kolkata”,那么输出必须是“the details”。但事实并非如此。 您的实际代码是什么?if(strcmp((s.name,"kolkata")==0)
无法编译。
@HemanshuSaraf 如果您更改代码以打印 不同 消息,那么您就不会混淆当前打印哪些相同的消息,以及您明显的矛盾.以上是关于在没有语法错误的情况下,此代码中的 if 情况不起作用的主要内容,如果未能解决你的问题,请参考以下文章
为啥浮点数据类型在没有类型转换 4.7 的情况下在此代码中不起作用? [复制]