C语言中字符串与空格的问题

题目描述: 输入一行字符,分别统计出其中英文字母、数字、空格和其他字符的个数。
输入格式:一行字符,长度不超过200
出现问题:空格被当成了‘\0'

#include
int main()
{   char ch[200];
    int i=0;
    int sum1=0, sum2=0, sum3=0, sum4=0; 
    scanf("%s",ch);
    while(ch[i] != '\0')
    {
        if((ch[i] >=96 && ch[i] <=125) || (ch[i] >=60 && ch[i] <=90))
           sum1 += 1;
        else if (ch[i] >=48 && ch[i] <=57)
           sum2 += 1;
        else if (ch[i] == 32)
           sum3 += 1;
        else
           sum4 += 1; 
        ++i;
       }
       printf("%d %d %d %d", sum1, sum2, sum3, sum4);
    return 0;
}

因为scanf的输入就是到空格结束,可以使用gets作为输入

#include<stdio.h>
int main()
{
    char str[25] = { 0 };
    gets(str);
    printf("%s\n", str);
    return 0;
}

scanf遇到空格、换行、制表符就自动截断
你可以使用gets函数,gets只有遇到换行才截断
或者循环scanf,直到遇到EOF

第6行:scanf("%s",ch); 修改为: scanf("%[^\n]",ch); 即可实现用scanf()只有遇到换行符'\n'才结束输入,而读入空格等字符。