我正在做一个程序,要求用户输入一个字符串并打印出大写和小写字母的数量。我正在尝试使用一个函数,但在打印它时遇到一些麻烦..对于每个字符输入我进入即时获取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);
}
答案 0 :(得分:3)
您的所有if
语句都为ch
指定了不同的值,并且不会检查ch
的值。
例如,如果输入正确的char
,则
if ((ch = isdigit(ch)) || ch == '\n')
会将0
分配给ch
,因为isdigit(ch)
会返回0
。我想你需要
if ( isdigit(ch) || ch == '\n')
islower
和isupper
相同。
答案 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))
代替。无需保留任何值。