UVa 1586 - Molar mass

计算分子式,刚开始忘了某一种元素个数大于10的情况,不过很容易就发现了bug,再后来一个比较隐蔽的bug就是 memset(num,'\0',sizeof(num)) 的位置放的不正确,导致前一次运算结果对 下一次结果产生了影响,   应有意识去避免这种错误。

#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main()
{
    int c,h,o,n,m,l,i,j,k,r,s,t,sum;
    char a[100],num[100];
    double zhiliang;
    scanf("%d",&m);
    for(k=1; k<=m; k++)
    {
        c=0; h=0; o=0; n=0; s=0; sum=0;
        scanf("%s",a);
        l=strlen(a);
        for(i=0; i<l; i++)
        {
            memset(num,'\0',sizeof(num));
            r=0;
            if(a[i]=='C')
            {
                if(a[i+1] == '\0' || a[i+1] == 'C' || a[i+1] == 'H' ||a[i+1] == 'O' ||a[i+1] == 'N' )
                    c++;
                while ( a[i+1]>=49 && a[i+1]<=57 )
                {
                    num[r++]=a[i+1];
                    i++;
                }
                c=c+atoi(num);
            }
            if(a[i]=='H')
            {
                if(a[i+1] == '\0' || a[i+1] == 'C' || a[i+1] == 'H' ||a[i+1] == 'O' ||a[i+1] == 'N' )
                    h++;
                while ( a[i+1]>=49 && a[i+1]<=57 )
                {
                    num[r++]=a[i+1];
                    i++;
                }
                h=h+atoi(num);
            }
            if(a[i]=='O')
            {
                if(a[i+1] == '\0' || a[i+1] == 'C' || a[i+1] == 'H' ||a[i+1] == 'O' ||a[i+1] == 'N' )
                    o++;
                while ( a[i+1]>=49 && a[i+1]<=57 )
                {
                    num[r++]=a[i+1];
                    i++;
                }
                o=o+atoi(num);
            }
            if(a[i]=='N')
            {
                if(a[i+1] == '\0' || a[i+1] == 'C' || a[i+1] == 'H' ||a[i+1] == 'O' ||a[i+1] == 'N' )
                    n++;
                while ( a[i+1]>=49 && a[i+1]<=57 )
                {
                    num[r++]=a[i+1];
                    i++;
                }
                n=n+atoi(num);
            }
        }
        zhiliang=12.01*c+1.008*h+16.00*o+14.01*n;
        printf("%.3lf\n",zhiliang);
    }
    return 0;
}

你可能感兴趣的:(UVa 1586 - Molar mass)