一道c++小测试的题,疯狂报错,实在不会解了

已知一个C原子的重量为12.01,一个H原子的重量为1.008,一个O原子的重量为16.00,一个N原子的重量为14.01(单位全部为g/mol)。然后需要求出一个分子式的重量(都是最简单的分子式,不含有括号)。

例如:C6H5OH的相对分子质量为94.108 g/mol。

输入描述
多组测试,输入一个K,表示K组样例。

然后K组输入,表示K个分子式。

分子式长度不超过500

输出描述
输出每个分子式的相对分子质量。

代码如下:


#include <stdio.h>

int main()
{
    char str[20][500] ={0};
    int i,j,k;
    float c = 12.01;
    float h = 1.008;
    float o = 16.00;
    float n = 14.01;
    float sum = 0.0;
    float tmp;
    int flag = 0;
    printf("请输入k:");
    scanf("%d",&k);
    getchar(); //吸收回车符
    printf("请输入%d组样例\n",k);
    for (i=0;i<k;i++)
        gets(str[i]);
    
    for(i=0;i<k;i++)
    {
        flag = 0;
        sum = 0.0;
        j = 0;
        while(1)
        {
            if(str[i][j] == '\0')
                break;
            if(str[i][j] == 'C' || str[i][j] == 'c' )
                tmp = c;
            else if(str[i][j] == 'H' || str[i][j] == 'h')
                tmp = h;
            else if(str[i][j] == 'O' || str[i][j] == 'o')
                tmp = o;
            else if(str[i][j] == 'N' || str[i][j] == 'n')
                tmp = n;
            else
            {
                flag = 1;
                break;
            }
            j++;
            if(str[i][j] >= '0' && str[i][j] <= '9')
            {
                sum += tmp * (str[i][j] - '0');
                j++;
            }else
            {
                sum += tmp;
            }
        }
        if(flag)
            printf("未知的元素%c\n",str[i][j]);
        else
            printf("%f\n",sum);
    }
    return 0;

}