C语言编程代码的问题

循环输入字符,累加所输入的数字字符个数、英语字符个数及其它字符个数,如果是数字字符,则将所有的数字字符对应的数据累加起来,输出数字字符个数、数字字符对应数据累加和、英语字符个数、其它字符个数。当输入的是半角(英文)叹号“!”时终止循环。

要求:用while设计一个无穷循环,每次从键盘读入一个字符,如果这个字符是数字字符(0~9),则将所有输入的数字字符对应的数据(如数字字符’9’对应的数据是9,而不是ASCII码值57。)累加起来,并且数字字符个数增加1,如果输入的字符是英语字符,则对应的英语字符个数增加1,否则其它字符个数增加1,如果输入的字符是半角(英文)叹号“!”,则使用break语句终止整个循环。要求用自增运算符实现字符个数增加1。程序运行后至少输入两个个数字字符、一个大写英语字符和一个小写英语字符、一个其它字符,以便验证程序是否正确。
循环结束后输出数字字符个数、数字字符对应数据累加和、英语字符个数、其它字符个数。

(提示:查ASCII码表,用数字字符减去某个字符或一个固定数字,得到该数字字符对应的数值(如: 9=’9’ – 48, 其它字符转换类似!),使用if语句判断输入字符的类型,分别用不同整型变量记录字符的个数。一次只输入一个字符,注意回车符,即每次在scanf(“%c”)后面用 getchar( ) 语句读走回车符号!!)。

代码如下:

#include<stdio.h>
int main()
{
    char c;
    int nb = 0,zm = 0,ot = 0;
    int sum = 0;
    while(1)
    {
        scanf("%c",&c);
        getchar();
        if(c == '!')
            break;
        else if(c>='0' && c<='9')
        {
            nb++;
            sum += (c - '0');
        }
        else if( (c>='a' && c<='z') || (c>='A' && c<='Z'))
            zm++;
        else
            ot++;
    }
    printf("数字字符个数%d、数字字符对应数据累加和%d、英语字符个数%d、其它字符个数%d",nb,sum,zm,ot);
    return 0;
} 



#include <stdio.h>
int main()
{
    int n1=0,e1=0,t1=0,sum=0;
    char c;
 
    while(1)
    {
           scanf("%c",&c);
          if(c=='!')
              break;
          if(c>='0' && c<='9')
          {
              n1++;
              sum += c - '0';
          }
          else if((c>='a' && c<='z') || (c>='A' && c<='Z'))
              e1++;
          else
              t1++;
    }
    printf("数字%d个,英文%d个,其它%d个\n",n1,e1,t1);
    printf("数字之和:%d\n",sum);
    return 0;
}