嘿,伙计们,我刚开始学习c类,我有一个关于比较c.中ASCII值的问题
假设我有单词"hello",我想检查ASCII表中的"h"是否与104匹配,通常情况下会匹配。因此,我使用下面的代码来实现这一点,尽管我似乎发现这种方法并不有效。所以我想知道是否还有其他方法。
char word [] = "hello";
if (("%d", word[0]) == 104) puts("Yay");
很抱歉,如果这是一个愚蠢的问题,但在我看来似乎没有那么有效。
非常感谢!
编辑:我发现效率低下的部分是:
("%d", word[0])
您的("%d", word[0])
看起来像是缺少printf
的printf
调用。但既然你不是在调用一个函数,那就根本不是这样了。它只是一个逗号运算符,用于计算左参数("%d"
(,丢弃结果,并使用右参数。
"%d"
是一种没有副作用的表达,因此评估它完全没有任何作用。
你的测试可以缩短为if(word[0] == 104)
,它也可以做同样的事情。或者更好的是,将其缩短为if(word[0] == 'h')
,它仍然相同,但可读。
您可以直接比较C中的char
和int
类型,因此以下代码:
char word[] = "hello";
if(word[0] == 104) puts("Yay");
如果与您的代码段等效。
char word [] = "hello";
if (("%d", word[0]) == 104) puts("Yay");
等效代码为:
if('h' == 104) puts("Yay");
最后的转换:
puts("Yay");
- 如果使用由逗号分隔的多个表达式,则会按顺序对它们求值,最后一个表达式决定结果
- 此外,您可以直接使用字符常量,如我的答案中所示。只需注意多字符常量,它们是合法的,但不可移植,因此也不真正有用
- 其次,即使没有启用优化,大多数编译器在恒定折叠方面也做得很好,所以效率并不低
- 最后,如果可能的话,这些常数用于删除控制结构