pta的题,请问为什么把clear和sync改成getchar()就成功了?

img


#include <iostream>
#include <iomanip>
using namespace std;
struct seekbook
{
    char name[31];
    double money;
};
int main()
{
    int n,i,t,h;
    double min,max;
    struct seekbook s[50];
    cin>>n;
    for(i=0;i<n;i++)
    {
        cin.clear();
        cin.sync();
        cin.getline(s[i].name,31);
        cin>>s[i].money;
    }
    max=s[0].money,t=0;
    for(i=0;i<n;i++)
    {
        if(s[i].money>s[0].money)
        {
            max=s[i].money;
            t=i;
        }
    }
    min=s[0].money,h=0;
    for(i=0;i<n;i++)
    {
        if(s[i].money<s[0].money)
        {
            min=s[i].money;
            h=i;
        }
    }
    cout<<setiosflags(ios::fixed)<<setprecision(2)<<max<<','<<' '<<s[t].name<<endl;
    cout<<setiosflags(ios::fixed)<<setprecision(2)<<min<<','<<' '<<s[h].name<<endl;
    return 0;
}

结果:

img

后来改成了:

#include <iostream>
#include <iomanip>
using namespace std;
struct seekbook
{
    char name[31];
    double money;
};
int main()
{
    int n,i,t,h;
    double min,max;
    struct seekbook s[50];
    cin>>n;
    for(i=0;i<n;i++)
    {
        getchar();
        cin.getline(s[i].name,31);
        cin>>s[i].money;
    }
    max=s[0].money,t=0;
    for(i=0;i<n;i++)
    {
        if(s[i].money>s[0].money)
        {
            max=s[i].money;
            t=i;
        }
    }
    min=s[0].money,h=0;
    for(i=0;i<n;i++)
    {
        if(s[i].money<s[0].money)
        {
            min=s[i].money;
            h=i;
        }
    }
    cout<<setiosflags(ios::fixed)<<setprecision(2)<<max<<','<<' '<<s[t].name<<endl;
    cout<<setiosflags(ios::fixed)<<setprecision(2)<<min<<','<<' '<<s[h].name<<endl;
    return 0;
}

结果:

img