为什么输出不了?求解答

#include<stdio.h>
#include<string.h>
int main(){
char str[100],p;
int input(char p);
int count(char p);
p=str;
input(p);
count(p);
}
int input(char p){
int i=0;
for(;
(p+i)=getchar()!='\n';i++);
}
int count(char p){
int a,b,c,d,i;
a=b=c=d=0;
for(i=0;
(p+i)!='\n';i++){
if(
(p+i)=='\0')a=a+1;
else if(
(p+i)>='A'&&
(p+i)<='Z')b=b+1;
else if((p+i)>='a'&&(p+i)<='z')c=c+1;
else d=d+1;
}
printf("大写字母个数:%d\n",b );
printf("小写字母个数:%d\n",c);
printf("空格个数: %d\n",a);
printf("其他字符个数:%d\n",d);
}


#include <stdio.h>
#include <string.h>
int main()
{
    char str[100], *p;
    int input(char *p);
    int count(char *p);
    p = str;
    input(p);
    count(p);
}
int input(char *p)
{
    gets(p);
}
int count(char *p)
{
    int a, b, c, d, i;
    a = b = c = d = 0;
    for (i = 0; *(p + i) != '\0'; i++)
    {
        if (*(p + i) == ' ')
            a = a + 1;
        else if (*(p + i) >= 'A' && *(p + i) <= 'Z')
            b = b + 1;
        else if (*(p + i) >= 'a' && *(p + i) <= 'z')
            c = c + 1;
        else
            d = d + 1;
    }
    printf("大写字母个数:%d\n", b);
    printf("小写字母个数:%d\n", c);
    printf("空格个数: %d\n", a);
    printf("其他字符个数:%d\n", d);
}

p = str; //p时字符类型,str是字符串,不能这样赋值