关于指针代替数组,找出一行文字中各类字符的有关问题

关于指针代替数组,找出一行文字中各类字符的问题
这是正确的代码
C/C++ code
#include <stdio.h>

int main()
{
    int s[50], *p, i;
    int upp, low, spa, dig, oth;
    i = upp = low = spa = dig = oth = 0;

    printf("Input string: \n");
    while ((s[i]=getchar()) != '\n')
    {
        i++;
    }
    p = s;

    while (*p != '\n')
    {
        if (*p>='A' && *p<='Z')
        {
            upp++;
        } 
        else if (*p>='a' && *p<='z')
        {
            low++;
        } 
        else if (*p == ' ')
        {
            spa++;
        } 
        else if (*p>='0' && *p<='9')
        {
            dig++;
        } 
        else
        {
            oth++;
        }
        p++;
    }

    printf("upp = %d\n", upp);
    printf("low = %d\n", low);
    printf("spa = %d\n", spa);
    printf("dig = %d\n", dig);
    printf("oth = %d\n", oth);

    return 0;
}

输入:Today is 2005/1/1
输出:1 6 2 6 2

这是错误的代码
C/C++ code
#include <stdio.h>

int main()
{
    int s[50], *p;
    int upp, low, spa, dig, oth;

    upp = low = spa = dig = oth = 0;

    printf("Input string: \n");
    scanf("%s", s); //为什么不能用字符串输入格式
    p = s;

    while (*p++ != '\n') //我把上面改成正确代码的格式,这里用 *p++
                              //发现输出变成了:0 6 2 6 3
    {
        if (*p>='A' && *p<='Z')
        {
            upp++;
        } 
        else if (*p>='a' && *p<='z')
        {
            low++;
        } 
        else if (*p == ' ')
        {
            spa++;
        } 
        else if (*p>='0' && *p<='9')
        {
            dig++;
        } 
        else
        {
            oth++;
        }
    }

    printf("upp = %d\n", upp);
    printf("low = %d\n", low);
    printf("spa = %d\n", spa);
    printf("dig = %d\n", dig);
    printf("oth = %d\n", oth);

    return 0;
}

请问错误代码中的注释情况如何理解?

------解决方案--------------------
[Quote=引用:]

int s[50] 这个是 int 类型,怎么可以用 字符串读了。。。

int类型不是以'\0'结尾的!
------解决方案--------------------
你第一个对了因为用了while 循环读取缓冲区的字符
while ((s[i]=getchar()) != '\n')
{
i++;
}

------解决方案--------------------
getchar一次读取一个字符,字符可以先在缓冲区中,如何getchar每次读一个字符。
scanf一次读取一行,所以得读到char[]数组中。
------解决方案--------------------
探讨
引用:
getchar一次读取一个字符,字符可以先在缓冲区中,如何getchar每次读一个字符。
scanf一次读取一行,所以得读到char[]数组中。

嗯,然后我改成char数组了,但是答案就不对了