为什么程序运行结果恒为0 4203921 0

要求:通过调用函数统计输入的字符串中字母字符,数字字符,空格字符数量。
代码主函数由题目给出,调用的函数是自己编的
代码如下:
#include <stdio.h>
#define MAXSTRLEN 80
void CountCharactersByType(const char *str, int *p_num_letters, int *p_num_digits, int *p_num_spaces);
int main(){
char ch, s[MAXSTRLEN+1];
int i, num_letters, num_digits, num_spaces;
i=0;
while ((ch=getchar())!='\n') {
if (i<MAXSTRLEN) s[i++]=ch; }
s[i]='\0';
CountCharactersByType(s, &num_letters, &num_digits, &num_spaces);
printf("%d %d %d\n", num_letters, num_digits, num_spaces);
return 0;
}
void CountCharactersByType(const char*str,int*p_num_letters,int*p_num_digits,int*p_num_spaces){
int i,num_letters,num_digits,num_spaces;
i=0;
num_letters=num_digits=num_spaces=0;
while(str[i]!='\0'){
if((str[i]>='a'&&str[i]<='z')||(str[i]>='A'&&str[i]<='Z')) num_letters++;
if(str[i]>='0'&&str[i]<='9')
num_digits++;
if(str[i]==' ')
num_spaces++;
i++;
}
}

p_num_letters
p_num_digits
p_num_spaces
这几个数在CountCharactersByType函数中没有被赋值,在最后添加如下代码:
*p_num_letters = num_letters;
*p_num_digits = num_digits;
*p_num_spaces = num_spaces;
代码修改如下:

#include <stdio.h>
#define MAXSTRLEN 80
void CountCharactersByType(const char *str, int *p_num_letters, int *p_num_digits, int *p_num_spaces);
int main()
{
    char ch, s[MAXSTRLEN+1];
    int i, num_letters, num_digits, num_spaces;
    i=0;
    while ((ch=getchar())!='\n') 
    {
        if (i<MAXSTRLEN) 
            s[i++]=ch; 
    }
    s[i]='\0';
    CountCharactersByType(s, &num_letters, &num_digits, &num_spaces);
    printf("%d %d %d\n", num_letters, num_digits, num_spaces);
    return 0;
}
void CountCharactersByType(const char*str,int *p_num_letters,int*p_num_digits,int*p_num_spaces)
{
    int i,num_letters,num_digits,num_spaces;
    i=0;
    num_letters=0;
    num_digits=0;
    num_spaces=0;
    while(str[i]!='\0')
    {
        if((str[i]>='a'&&str[i]<='z')||(str[i]>='A'&&str[i]<='Z')) num_letters++;
        if(str[i]>='0'&&str[i]<='9')
            num_digits++;
        if(str[i]==' ')
            num_spaces++;
        i++;
    }
    *p_num_letters = num_letters;
    *p_num_digits = num_digits;
    *p_num_spaces = num_spaces;
}

你要修改的是函数参数指针的值,不是又定义三个临时变量啊

void CountCharactersByType(const char*str,int*p_num_letters,int*p_num_digits,int*p_num_spaces)
{
int i=0;
*p_num_letters=*p_num_digits=*p_num_spaces=0;
while(str[i]!='\0'){
if((str[i]>='a'&&str[i]<='z')||(str[i]>='A'&&str[i]<='Z')) (*p_num_letters)++;
if(str[i]>='0'&&str[i]<='9')
(*p_num_digits)++;
if(str[i]==' ')
(*p_num_spaces)++;
i++;
}
}