字符串的一道题,大神帮我改一下

描述
医生在书写药品名的时候经常不注意大小写,格式比较混乱。现要求你写一个程序将医生书写混乱的药品名整理成统一规范的格式,即药品名的第一个字符如果是字母要大写,其他字母小写。如将ASPIRIN、aspirin整理成Aspirin。
输入
第一行一个数字n,表示有n个药品名要整理,n不超过100。
接下来n行,每行一个单词,长度不超过20,表示医生手书的药品名。药品名由字母、数字和-组成。
输出
n行,每行一个单词,对应输入的药品名的规范写法。
样例输入
4
AspiRin
cisapride
2-PENICILLIN
Cefradine-6
样例输出
Aspirin
Cisapride
2-penicillin
Cefradine-6
来源

#include<stdio.h>
#include<string.h>
int main()
{
  int n,i,j;
  char ch[256];
  scanf("%d",&n);
  for(j=0;j<n;j++)
  {
      gets(ch);
      int len=strlen(ch);
  for(i=0;i<len;i++)
    {
     if(i==0)
     {
         if(ch[i]>='a'&&ch[i]<='z') ch[i]-=32;
     }
     else
     {
         if(ch[i]>='A'&&ch[i]<='Z') ch[i]+=32;
     }
    }
    printf("%s\n",ch);
  }

    return 0;
}


无法完整运行程序

#define MAX_NUM 100
#define MAX_LEN 20
int main()
{
  int n,i,j;
  char ch[MAX_NUM][MAX_LEN];
  scanf("%d",&n);
  for(i=0;i<n;i++)
  {
     scanf("%s",ch[i]);
  }

      //int len=strlen(ch);
  for(i=0;i<n;i++)
    {
        for(j=0;j<strlen(ch[i]);j++)
        {
          if((ch[i][0]>='a'&&ch[i][0]<='z')||(ch[i][0]>='A'&&ch[i][0]<='Z'))
           {
               if(j==0)
               {
                  if(ch[i][j]>='a'&&ch[i][j]<='z') ch[i][j]-=32;
               }
              else if(ch[i][j]>='A'&&ch[i][j]<='Z') ch[i][j]+=32;


            }
           }
        }
    printf("输出:\r\n");
    for(i=0;i<n;i++)
    {
     printf("%s\r\n",ch[i]);
    }
   // printf("%s\r\n",ch[0]);

    return 0;
}

应该是scanf后没读回车,加一个getchar()再gets()