gpt4 book ai didi

c - 为什么有多个作品,如果不是这种情况

转载 作者:行者123 更新时间:2023-11-30 20:44:15 25 4
gpt4 key购买 nike

我正在学习 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”都能很好地更新数组。

您能帮我理解这种情况下行为的差异吗?

最佳答案

我们需要知道什么:

  • < 的结果比较是 int值(value)1对于 true 和 0为假。就像 1 + 3 的结果是 int值(value)4 ,同理1 < 3的结果是 int值(value)1 .
  • 接线员 <具有从左到右的结合性。这意味着在 1 < 2 < 3它将被解析为 (1 < 2) < 3 - IE。首先是 1 < 2计算后,结果为< 33相比.

所以:

'A' < c < 'Z'

被解释为

('A' < c) < 'Z'

'A' < c的结果是 10 。当'A'低于c ,则变为:

1 < 'Z' 

否则它会变成:

0 < 'Z'

两种情况都是正确的,因此比较始终正确。

如果你想检查一个数字是否是 A 之间的字母和Z 包括字母AZ ,您可以:

if ('A' <= c && c <= 'Z') {

#include <ctype.h> 并使用 isupper 功能:

if (isupper(c)) {

关于c - 为什么有多个作品,如果不是这种情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57408346/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com