首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2012-04-17 
关于指针代替数组,找出一行文字中各类字符的问题这是正确的代码C/C++ code#include stdio.hint main(){i

关于指针代替数组,找出一行文字中各类字符的问题
这是正确的代码

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数组了,但是答案就不对了

热点排行