打印大写/小写字母

时间:2013-02-01 15:26:36

标签: c

我正在做一个程序,要求用户输入一个字符串并打印出大写和小写字母的数量。我正在尝试使用一个函数,但在打印它时遇到一些麻烦..对于每个字符输入我进入即时获取0, 0 非常感谢您的帮助,以了解我做错了什么:

#include <stdio.h>
#include <ctype.h>

int case_letters(int ch);

int main(void)

{
    int x;
    printf("please enter a some characters, and ctrl + d to see result\n");

    case_letters(x);

    return 0;
}

int case_letters(int ch)

{
    int numOfUpper = 0;
    int numOfLower = 0;

    while ((ch = getchar()) != EOF)
    {
        if ((ch = isdigit(ch)) || ch == '\n')
        {
            printf("please enter a valid character\n");
            continue;
        }


        else if ((ch = isupper(ch)))
        {
            numOfUpper++;
        }

        else if ((ch = islower(ch)))
        {
            numOfLower++;
        }

    }

    return  printf("%d, %d", numOfUpper, numOfLower);
}

2 个答案:

答案 0 :(得分:3)

您的所有if语句都为ch指定了不同的值,并且不会检查ch的值。

例如,如果输入正确的char,则

if ((ch = isdigit(ch)) || ch == '\n')

会将0分配给ch,因为isdigit(ch)会返回0。我想你需要

if ( isdigit(ch) || ch == '\n')

islowerisupper相同。

答案 1 :(得分:1)

    if ((ch = isdigit(ch)) || ch == '\n')
            ^-- assignment, not equality test.

你正在使用isdigit()和isupper()以及islower()的返回值来废除ch的值,这样一旦你执行了这个操作,就会销毁用户输入的原始值。 isdigit test。

尝试

    if (isdigit(ch) || ch == '\n')
    else if (isupper(ch))
    else if (islower(ch))

代替。无需保留任何值。