cin读取字符串数组和string类型字符串

  • Post author:
  • Post category:其他

1.问题描述:

C++ primer plus 第5章课后习题第7题,在使用cin读取键盘输入的数字后,又使用getline(cin,str)函数读取新的字符串,在读取num1之后直接跳过了getline函数,开始读取num2。原因是第一次使用cin后,换行符留在了输入队列中,getline将换行符当作了要调用的内容。所以在第一此cin调用之后加一行cin.get()来处理换行符。

int num1,num2;
string str;
cin>>num1;
cin.get();//处理换行符
getline(cin,str);
cin>>num2;

代码

void practice5_7()
{
    struct Car{
      string made_company;
      int made_year;
    };
    
    int num;
    cout<<"How many cars do you have: ";
    cin>>num;
    cin.get();//处理换行符
    
    Car* pcar=new Car[num];
    for (int i=0;i<num;i++ )
    {
        cout<<"Car #"<<i<<":\r\n";
        cout<<"\tPlease enter the made commpany:";
        getline(cin,pcar[i].made_company);
        cout<<"\tPlease enter the made year:";
        cin>>pcar[i].made_year;
        cin.get();
    }
    cout<<"Here is your collection: "<<endl;
    for (int i=0;i<num;i++)
    {
        cout<<"\t"<<(*(pcar+i)).made_year<<" "<<(pcar+i)->made_company<<endl;
    }
    delete [] pcar;
}

2.cin的用法总结

2.1cin读取数组

const int Asize=20;
char name[Asize];
cin>>name;
cin.get();//处理换行符
cin.get(name,Asize).get();//读取一行字符,遇到空格符停止读取,第二个get函数用于处理输入队列中的换行符
cin.getline(name,Asize);//读取一行字符,若字符个数大于Asize,则读取前Asize个字符,可以读取字符中间的空格,如“good moring”

2.2cin读取string

const int Asize=20;
string str1,str2;
cin>>str1;
cin.get();//处理换行符
getline(cin,str2);

版权声明:本文为guanjing_dream原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。