客服说我昵称违规 2022-02-06 16:55 采纳率: 0%
浏览 41

C语言 关于0到1区间属于bool类型的true还是false?

问题遇到的现象和发生背景

最近在做牛客网的华为机试题,遇到了个白丝不得姐的问题,该题目可搜索:HJ14 字符串排序

问题相关代码,请勿粘贴截图

if(strcmp(str[j],str[j+1])>0) //这样写是对的
if(strcmp(str[j],str[j+1])) //这样写是错误的

我的解答思路和尝试过的方法

以下是strcmp相关的:
extern int strcmp(const char *s1,const char *s2);
规则
当s1<s2时,返回为负数;
当s1=s2时,返回值= 0;
当s1>s2时,返回正数。

if语句的判定条件非0即为真
问题就这么出现了:当s1>s2时,返回正数,即返回值>0,if判定应该为真啊.
可是if(strcmp(str[j],str[j+1])) 就是错误的

是我对概念理解错误了?
还是由于编译环境的原因出现的问题呢?
求姐

  • 写回答

4条回答 默认 最新

  • 关注

    strcmp()返回值有负数,0和正数三种值。

    if判断时非0为true,0为false

    if(strcmp(str[j],str[j+1])>0) if判断的是用>号比较后的结果.
    用>号比较后就是只有1(true)和0(false)两种结果,就是只有strcmp()返回正数时,if判断才成立, strcmp()返回0或负数时,if判断不成立.
    而 if(strcmp(str[j],str[j+1])) if判断的直接就是strcmp()的返回值.
    就是strcmp()返回正数或负数时,if判断都成立, 只有strcmp()返回0时,if判断才不成立.
    也就是 if(strcmp(str[j],str[j+1])) 等同 if(strcmp(str[j],str[j+1]) != 0)
    当 strcmp()返回负数时,两个if判断结果就不一样了

    评论 编辑记录

报告相同问题?

问题事件

  • 专家修改了标签 2月6日
  • 创建了问题 2月6日

悬赏问题

  • ¥15 问题遇到的现象和发生背景 360导航页面千次ip是20元,但是我们是刷量的 超过100ip就不算量了,假量超过100就不算了 这是什么逻辑呢 有没有人能懂的 1000元红包感谢费
  • ¥30 计算机硬件实验报告寻代
  • ¥15 51单片机写代码,要求是图片上的要求,请大家积极参与,设计一个时钟,时间从12:00开始计时,液晶屏第一行显示time,第二行显示时间
  • ¥15 用C语言判断命题逻辑关系
  • ¥15 原子操作+O3编译,程序挂住
  • ¥15 使用STM32F103C6微控制器设计两个从0到F计数的一位数计数器(数字),同时,有一个控制按钮,可以选择哪个计数器工作:需要两个七段显示器和一个按钮。
  • ¥15 在yolo1到yolo11网络模型中,具体有哪些模型可以用作图像分类?
  • ¥15 AD9910输出波形向上偏移,波谷不为0V
  • ¥15 淘宝自动下单XPath自动点击插件无法点击特定<span>元素,如何解决?
  • ¥15 曙光1620-g30服务器安装硬盘后 看不到硬盘