0

我正在做一个程序,要求用户输入一个字符流并打印出大写和小写字母的数量。我正在尝试使用一个函数来执行此操作,但是在打印它时遇到了一些麻烦..对于我输入的每个字符输入,我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);
}
4

2 回答 2

3

您的所有if语句都为 ' 值分配不同的值ch并且不检查ch's 值。

例如,如果您输入一个正确的char,这

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

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

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

islower和相同isupper

于 2013-02-01T15:28:25.160 回答
1
    if ((ch = isdigit(ch)) || ch == '\n')
            ^-- assignment, not equality test.

您正在ch使用 isdigit()、isupper() 和 islower() 的返回值丢弃 的值,以便在执行 isdigit 测试后立即破坏用户输入的原始值。

尝试

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

反而。无需保留 iswhatever 值。

于 2013-02-01T15:29:49.347 回答