【问题标题】:Trouble with creating good IF statement in C在 C 中创建良好的 IF 语句时遇到问题
【发布时间】:2012-05-13 10:37:40
【问题描述】:

我正在尝试使用 IF 条件创建类似的东西:

if(mychar[i] = "+")
{
   /* do something */
}

我想检查如果 char[number i-1] 是加号,但我不能在我的条件下正确定义加号:/

如果有人可以帮助我,我将不胜感激。

【问题讨论】:

  • 无意冒犯,但如果这种事情让您感到困扰,我建议您在继续之前先买一本关于 C 的好书。

标签: c if-statement char


【解决方案1】:

两个修复:

if(mychar[i] == '+')
                ^ use '' for char, and "" for strings
             ^ = is an assignment operator, == is a comparison operator

值得注意的是,虽然不推荐,但仅将赋值运算符用作布尔表达式是有效的,因为 0 被认为是 FALSE,而任何其他值都被认为是 TRUE。

【讨论】:

  • 修复 'if(mychar[i] == '+')' - if 中缺少 'i'.. '
  • 我知道你会发现并修复它,但这是一个放弃的好机会 :)
【解决方案2】:

为了防止这种使用一个等号的事故,请开始这样做

if ('+' == mychar[i]) 

一旦你养成了放置常量 (char, int, double, ...) 的习惯,编译就会吐出你的错误。

【讨论】:

  • IMO,这种方式更难阅读。学习比较值的正确方法比使用绷带更好。
  • 不! Yoda 条件适用于那些无法警告您更合乎逻辑地编写代码的蹩脚编译器。没有人说“如果加号是mychar[i]”。
  • 你养成了习惯,然后你就没有问题了。这是关于适应某种思想。哦 - 它可以正常工作。
  • 当任何现代编译器都能够警告此类结构时,为什么还要训练自己编写不合逻辑的代码。训练自己阅读和理解编译器错误和警告比编写反向代码更好。
  • @dreamlax - 声明 if (mychar[i] = 'x') 在逻辑上是正确的。但可能不是你想要的。这就像说“我的钱包里有 5 便士,让我们检查一下,哦,是的”或“我的钱包里有什么硬币,有 5 便士,是的,有”既合理又合乎逻辑的陈述。
【解决方案3】:

鉴于您原来的 if 语句 f(mychar[i]="+") { do sth }

首先,使用单个 = 会导致分配。在这种情况下,将“+”分配给mychar[i]

C 可以让你在 if 语句中赋值,但我从不知道有人在实践中这样做过。您正在尝试比较值,因此您想使用 == 而不是 =

其次,您使用的是常量字符串"+" 而不是字符'+',因此编译器抱怨将指向字符串的指针分配给字符。

最后,在将值与常量进行比较时,我使用了一个构造。我把常量放在==之前。

if('+' == mychar[1])

如果我快速输入并输入if('+' = mychar[1]),我会在尝试将值分配给常量时收到编译时错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-06
    • 1970-01-01
    相关资源
    最近更新 更多