如果语句不适用于 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 数组元素的主要内容,如果未能解决你的问题,请参考以下文章

删除语句不适用于oracle中的查询

QDataStream 不适用于定制的 char 数组

JS中for...in 语句用于对数组或者对象的属性进行循环操作吗?

SQL 语句不适用于 Oracle JDBC

用于检查 char 数组是不是包含 Java 中用户给定字母的 if 语句

SQL - 如果存在不适用于 Select 语句?