C语言:输入30个字母,输出有几个

char a[30];
int b[26]={0};
int i,j;
printf("输入30个字符、\n");
for(i=0;i<30;i++)
{ scanf("%c",&a[i]);
switch(a[i])
{
case 'a':b[1]++;break;
case 'b':b[2]++;break;
case 'c':b[3]++;break;
case 'd':b[4]++;break;
case 'e':b[5]++;break;
case 'f':b[6]++;break;
case 'g':b[7]++;break;
case 'h':b[8]++;break;
case 'i':b[9]++;break;
case 'j':b[10]++;break;
case 'k':b[11]++;break;
case 'l':b[12]++;break;
case 'm':b[13]++;break;
case 'n':b[14]++;break;
case 'o':b[15]++;break;
case 'p':b[16]++;break;
case 'q':b[17]++;break;
case 'r':b[18]++;break;
case 's':b[19]++;break;
case 't':b[20]++;break;
case 'u':b[21]++;break;
case 'v':b[22]++;break;
case 'w':b[23]++;break;
case 'x':b[24]++;break;
case 'y':b[25]++;break;
case 'z':b[26]++;break;
}
}
for(i=0;i<25;i++,j++)
{
printf("有%d个%c\n",b[i],j+97);
}
求解这个程序怎么错了。。【虽然能成功编译,但是答案是不对的

你好!

代码改了,你对照原来的程序看看吧,有问题再问

#include<stdio.h>
int main()
{
char a[30];
    int b[27]={0};               // 定义数组大小为 27,存26个字母的数量 
    int i;                       // 变量 j 可以不要 
    printf("输入30个字符、\n");
   scanf("%s",a);              // 这个赋值放在循环外面,去掉数组下标 
    // %c 改成 %s 直接输入字符串 
    for(i=0;i<30;i++)            // 这里循环统计开始 
 {
  switch(a[i])
  {
   case 'a':b[1]++;break;
        case 'b':b[2]++;break;
        case 'c':b[3]++;break;
        case 'd':b[4]++;break;
        case 'e':b[5]++;break;
        case 'f':b[6]++;break;
        case 'g':b[7]++;break;
        case 'h':b[8]++;break;
        case 'i':b[9]++;break;
        case 'j':b[10]++;break;
        case 'k':b[11]++;break;
        case 'l':b[12]++;break;
        case 'm':b[13]++;break;
        case 'n':b[14]++;break;
        case 'o':b[15]++;break;
        case 'p':b[16]++;break;
        case 'q':b[17]++;break;
        case 'r':b[18]++;break;
        case 's':b[19]++;break;
        case 't':b[20]++;break;
        case 'u':b[21]++;break;
        case 'v':b[22]++;break;
        case 'w':b[23]++;break;
        case 'x':b[24]++;break;
        case 'y':b[25]++;break;
        case 'z':b[26]++;break;
  }
    }
 for(i=1;i<=26;i++)     // 循环打印 
 { 
        printf("有%d个%c\n",b[i],i+96);
 }        
return 0;
}

追问

它输入的时候要输入多少个字母?为什么我输入了不止30个。。

追答

你输入多少个都行,只能统计的时候,统计前30个了,你输入 5 个也行;
不知道你程序的要求是什么?

追问

输入30个字母,统计各个字母在中间有多少个

追答

那你输入的时候,就数着输入的个数吧,或者给你改程序

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2016-05-05
#include<stdio.h>
int main(){
char a[30]={0};
    int b[27]={0};
    int i=0,j=0;
    printf("输入30个字符、\n");
    for(i=0;i<30;i++)
{ scanf("%c",&a[i]);}
for(i=0;i<30;i++)
{
  switch(a[i])
  {
  case 'a':b[1]++;break;
        case 'b':b[2]++;break;
        case 'c':b[3]++;break;
        case 'd':b[4]++;break;
        case 'e':b[5]++;break;
        case 'f':b[6]++;break;
        case 'g':b[7]++;break;
        case 'h':b[8]++;break;
        case 'i':b[9]++;break;
        case 'j':b[10]++;break;
        case 'k':b[11]++;break;
        case 'l':b[12]++;break;
        case 'm':b[13]++;break;
        case 'n':b[14]++;break;
        case 'o':b[15]++;break;
        case 'p':b[16]++;break;
        case 'q':b[17]++;break;
        case 'r':b[18]++;break;
        case 's':b[19]++;break;
        case 't':b[20]++;break;
        case 'u':b[21]++;break;
        case 'v':b[22]++;break;
        case 'w':b[23]++;break;
        case 'x':b[24]++;break;
        case 'y':b[25]++;break;
        case 'z':b[26]++;break;
  }
    }
 for(i=1;i<27;i++,j++)
 { 
        printf("有%d个%c\n",b[i],j+97);
    }
}

  没有b[26]。只有b[0]到b[25],下标溢出

  输入的时候连续输入

本回答被提问者采纳
第2个回答  2013-11-24
%c会读入空格 所以输入的时候 if(a[i]==' ')scanf("%c",&a[i]);
j没有定义初始值,这里改为0,还有数组的小问题,相信你可以完虐这个
第3个回答  2013-11-24
你的数组b 一共才26个 下标应该是从0至 25 你的下标写错了, b[26]这样就会下标越界了。
第4个回答  2013-11-24
目测符号 } 多了吧? 没学过C,不知对不对