【发布时间】:2019-12-15 21:56:12
【问题描述】:
我正在学习 C,但遇到了一个奇怪的问题。我想我理解了多个 if 和 else-if 语句之间的区别,但我根本无法理解这次行为上的区别。如果我删除 else 关键字,它会按预期工作,但如果加上 else 则不会。
代码是关于在不区分大小写的情况下计算每个字母的出现次数(因此“a”和“A”都算作字母“a”出现 1 次)。
我已经尝试在可能的情况下省略大括号,但没有任何改变,所以我将它们留在里面以避免警告。
while ((c = getchar()) != EOF)
{
if ('A' < c < 'Z')
{
++array[c - 'A'];
}
else if ('a' < c < 'z')
{
++array[c - 'a'];
}
}
当我输入“a”时,数组不会递增,但如果我删除 else 语句从而切换到多重 if 情况,它会按预期工作。字母“A”在这两种情况下都很好地更新了数组。
能否请您帮助我理解在这种情况下的行为差异?
【问题讨论】:
-
if ('A' < c < 'Z')不做你认为它做的事。使用if ('A' < c && c < 'Z')(顺便说一句,它排除“A”和“Z”从允许值的域中;考虑到典型白话中的字母“A”)。 -
这是一个常见的初学者错误,源于假设该语言以某种方式工作,而不是研究它实际上是如何工作的。你不能通过反复试验来编写代码。
-
您将
c定义为int,对吗?如果您定义为char,则会出错。 -
好吧,至少安蒂找到了一个像样的规范骗子。我添加到 SO C 常见问题解答 here,因为这是一个常见的初学者问题。
-
奇怪的是
if ('A' < c < 'Z')为字母 'A' 工作。你的假设是对的,但我仍处于这本书的开头,并开始为事情增添一些趣味。是的,c 是整数。感谢您链接常见问题解答,我将确保仔细阅读。
标签: c if-statement codeblocks