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 版权协议,转载请附上原文出处链接和本声明。