分子量计算,这里哪错了??


#include
#include
int main()
{
  const double d[]={0,0,12.01,0,0,0,0,1.008,0,0,0,0,0,14.01,16.00};
  char str[100][100]={'\0'};
  char x;
  double sum[100]={0},n=0;
  int numble=0;
  scanf("%d",&numble);
  for(int j=0;j0;
      gets(str[j]);//???
     for(int i=0;ifor(int i=0;str[j][i]!='\0';i++)
    {
      if(isalpha(str[j][i]))//是字母
        {
          x=str[j][i];
          sum[j]+=d[x-'A'];
        }
      else//是数字
        {
           n=str[j][i]-'0';
          while(isdigit(str[j][i+1]))
          {
              n=n*10;
              n+=str[j][i+1]-'0';
              i++;
          }
          sum[j]+=(n-1)*d[x-'A'];
        }
     }
     printf("%.3f",sum[j]);
    }
  }
}

img

重新修改见注释,供参考:

#include<stdio.h>
#include<ctype.h>
int main()
{
  const double d[]={0,0,12.01,0,0,0,0,1.008,0,0,0,0,0,14.01,16.00};
  char str[100]={'\0'};  //[100] 修改
  char x , fx;           //修改
  double sum[100]={0},n=0;
  int numble=0;
  scanf("%d",&numble);
  getchar();            //修改
  for(int j=0;j<numble;j++)
  {

      scanf("%s", str); //gets(str[j]);
                        //for(int i=0;i<numble;i++) 修改
      n=0;              //{                         修改
      for(int i=0;str[i]!='\0';i++)
      {
          if(isalpha(str[i]))//是字母
          {
              x=str[i];
              sum[j]+=d[x-'A'];
              if (n != 0)
                   sum[j] += (n-1)*d[fx-'A'];
              fx = x;
              n=0;
          }
          else//是数字
          {
              n = n * 10 + str[i]-'0';
                  //while(isdigit(str[j][i+1]))
                  //{
                   //   n=n*10;
                   //   n+=str[j][i+1]-'0';
                   //   i++;
                   //}
              if (str[i+1] == '\0')
                   sum[j] += (n-1)*d[fx-'A'];
          }
      }
      printf("%.3f\n",sum[j]);
                   //}修改
  }
  return 0;
}