这两个陈述是否相同?
if (input != NULL && strcmp(input, "quit") == 0)
和
if (input != NULL && strcmp(input, "quit"))
答案 0 :(得分:2)
没有。第一个检查strcmp
的结果是否为0。
第二个检查strcmp
的结果是否为真。但是true等于任何其他非null值(感谢UnholySheep告诉我,因为我忘了)并且0等于NULL。所以他们是不同的。
但这些是相同的:
if (input != NULL && strcmp(input, "quit") == 0)
if (input != NULL && !strcmp(input, "quit"))
由于!strcmp
检查值是否为false。 False等于0。
答案 1 :(得分:0)
你需要写。
if(input != NULL && !strcmp(input, "quit"))
这是因为如果strcmp相等则为零,这意味着它返回" false"当他们是相同的。这就是为什么你需要逻辑而不是。
同样只是为了你的信息NULL实际上只是一个常数零,所以你也可以写。
if(input && !strcmp(input, "quit")
答案 2 :(得分:0)
在C中,if
语句仅检查值是否为zero or non-zero
。例如,if(3)
或if(-1)
始终有效但if(0)
无法正常工作。
同样strcmp()
函数返回两个字符串之间的差异,结果可能是1,35,-27 ...根据您的输入。如果只有字符串相等,strcmp()
结果为0。
所以if(input && !strcmp(input, "quit"))
不是if(input && !strcmp(input, "quit") == 0)
答案 3 :(得分:0)
此函数返回以下值:
如果返回值< 0然后它表示str1小于str2。
如果返回值> 0然后它表示str2小于str1。
如果返回值= 0则表示str1等于str2。
对于你的情况,strcmp(输入,"退出")不等于0.所以第一个语句将为false而第二个语句为true。
有关详情,请查看:link