为啥有一个样本无法通过?

我的代码:

#include<iostream>
using namespace std;

int main()
{
    string str[10]={"ling","yi","er","san","si","wu","liu","qi","ba","jiu"};
    int sum=0,i=1;
    char c;

    while(i)
    {
        c=getchar();
        if(c<48||c>57)
        {
            if(i==1)
            {
                if(c==' ')
                    continue;
                else
                    return 0;
            }
            else
                break;
        }
        i++;
        sum+=c-48;
    }

    i=1;
    while(sum/i/10)
        i*=10;

    do
    {
        cout<<str[sum/i];
        if(i>1)
            cout<<' ';
        else
            cout<<endl;
        sum-=sum/i*i;
        i/=10;
    }while(sum);

    return 0;
}

题目:

img


PTA《PAT (Basic Level) Practice (中文)》1002《写出这个数》测试点2(1分)

当sum的值刚好等于i的值,比如1234->sum=10,i=10,运行到40行的时候sum-=sum/i*i之后得到0,在while(sum)判断的时候退出,将42改成while(i>0)就可以了