如果语句不适用于 C 中的 char 数组元素
Posted
技术标签:
【中文标题】如果语句不适用于 C 中的 char 数组元素【英文标题】:If statements not working with char array elements in C 【发布时间】:2017-11-18 19:08:44 【问题描述】:我必须编写这个程序,当用户输入一个单词时,它会将其更改为它的复数版本。我有三个规则。
-
如果它以“y”结尾,我们将其更改为“ies”
如果它以“sh”或“ch”结尾,我们在末尾添加“es”
否则,我们在末尾添加一个“s”
我有一个名为 WhichRule( char word[], char plural [])
的函数,我应该编写 if 语句,以便查看要应用哪个规则,函数 WhichRule
将调用 RuleOne( char word[], char plural [])
、RuleTwo( char word[], char plural [])
和 RuleThree( char word[], char plural [])
。
我在编写 if 语句时遇到问题,我要复制的代码是我尝试编写 if 语句的两种不同方式,但都没有奏效。我将不胜感激任何帮助。
void WhichRule(char word[], char plural[])
int len = strlen(word);
if (word[len - 1] = 'y')
ApplyRuleOne(plural, word);
printf("this");
else if (word[len - 2, len - 1] = 'c', 'h')
ApplyRuleTwo(plural, word);
printf("is");
else if (word[len - 2] == 's' && word[len - 1] == 'h')
ApplyRuleTwo(plural, word);
printf("a");
else
ApplyRuleThree(plural, word);
printf("test");
【问题讨论】:
word[len - 1] == 'y'
相等不赋值和word[len - 2, len - 1] = 'c', 'h'
--> word[len-2]=='c' && word[len-1]=='h'
。
else if (word[len - 2, len - 1] = 'c', 'h')
- 这到底是什么?
您的else-if
中有一个逗号运算符,然后再次赋值而不是检查相等性。
而表达式word[len - 2, len - 1] = 'c', 'h')
将'h'
分配给word[len-1]
....在那个表达式中有一对comma operators
【参考方案1】:
问题
这是将“=”与“==”混淆的常见错误。 '=' 是赋值运算符 ans 用于为变量赋值 所以
if (word[len - 1] = 'y')
这会将值“y”分配给变量 word[len-i]
解决方案
要比较这些值,请使用 '==' like
if (word[len - 1] == 'y')
代码
void WhichRule(char word[], char plural[])
int len = strlen(word);
if (word[len - 1] == 'y')
ApplyRuleOne(plural, word);
printf("this");
else if (word[len - 2] == 'c' && word[len - 1] == 'h')
ApplyRuleTwo(plural, word);
printf("is");
else if (word[len - 2] == 's' && word[len - 1] == 'h')
ApplyRuleTwo(plural, word);
printf("a");
else
ApplyRuleThree(plural, word);
printf("test");
[P.S : 检查最后一个字符 'ch' 的行也有问题。]
【讨论】:
一个遗留问题是,如果您将"a"
作为单词传递,代码会尝试访问单词开头之前的字符,这是未定义的行为。以上是关于如果语句不适用于 C 中的 char 数组元素的主要内容,如果未能解决你的问题,请参考以下文章
JS中for...in 语句用于对数组或者对象的属性进行循环操作吗?