利用元音,降低外壳辅音

时间:2015-09-27 17:34:44

标签: c string

我有一些我写过的代码试图将元音大写并使辅音小写。然而,它只输出一切资本,即

  

ABCDEsFGE

的输出
  

abcsdefge

int main(void)
{
    int a;
    printf("Non vowels in lower cap: ");

}


}

int vowerls (int f)
{
    f = getchar();
    f = ?  : putchar(tolower(cf));
    return c;

}

我在这里缺少什么?

5 个答案:

答案 0 :(得分:3)

逻辑OR运算符||根据操作数是评估为0还是1返回01。对于'a''b'等操作数,它始终被视为真值(1,非零)。因此,您的支票不符合您期望的目的。

引用C11标准,章节§6.5.14

  

||运算符如果其任一操作数比较不等于0,则应得1;否则,它会产生0。

您可以使用(落实)switch案例来完成工作。

答案 1 :(得分:3)

该行

cellForRow

造成了这个问题。首先,正如@RichTolley所说,您需要使用c = ( 'a' || 'e' || 'i' || 'o' || 'u') ? putchar(toupper(c)) : putchar(tolower(c)); 而不是==。假设你这样做,你将拥有的是

=

由于括号是第一个,它将首先评估括号中的内容,然后才与c == ('a' || 'e' || 'i' || 'o' || 'u') : // etc. 进行比较。由于非零整数(并且,通过扩展,字符)是真实的,它将看到c,它读作97,将其评估为真,注意它后面有'a',并且停止评估,因为真||任何事都是真的。因此,它总是将三元运算符的第一部分评估为真,并打印出大写字母。你需要的是

||

这实际上会检查(c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u') : // etc. 是否等于其中之一。

答案 2 :(得分:2)

使用('a' || 'e' || ...,您不会将这些字母与c进行比较。你只是评估5个字母的逻辑or,这将永远是真的。试试(c == 'a' || c == 'e' || ...

答案 3 :(得分:0)

请一致地缩进代码,在每个操作支架后建议4个空格' {' 并且在每个结束括号之前取消缩进'}'

永远不要使用制表符进行缩进,因为每个字处理器/编辑器都有不同的制表符/制表符宽度

即使使用可变宽度字体,这4个空格也足够宽,可以看到

在C中,不能做复合比较,需要分别进行比较

main()函数需要输入下一个char,因此可以传递给isvowel()函数 并检查输入结束

' ='是作业,' =='是比较

有时,' y'是一个元音,代码不处理这种可能性

未使用isvowel()返回的值,因此更改为返回void

从终端输入时,结果将是屏幕上的隔行扫描字符 可能希望将结果保存到缓冲区中,并将printf()放在最后的缓冲区

// prototype
void isvowel( int );

int main(void)
{
    int a;
    printf("Type letters; non-vowels will be printed lower case, vowels will be printed uppercase: ");

    while ( (a = getchar()) && (a != EOF) )
    {
        isvowel(tolower(a));
    }
    return 0;
}


void isvowel (int c)
{
    (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u') ? putchar(toupper(c)) : putchar(tolower(c));
}

答案 4 :(得分:0)

其他答案指出了你的错误以及如何正确地进行比较。

长链比较可能会变得有点笨拙。您也可以检查当前字符是否在库函数strchr的某个字符串中找到,这使得比较更加简洁:

if (strchr("aeiou", c)) ...    // character is a lower-case vowel

您必须<string.h>包含strchr