3.3.4 cin与get()/getline()函数的搭配问题
在cin和get()/getline()函数搭配使用时,常常会出现问题,见代码3.6。
代码3.6 cin与get()/getline()函数的搭配CinAndGet
<————————————————文件名:example306.cpp———————————> 01 #include<iostream> 02 int main() 03 { 04 using namespace std; 05 char name[16]; 06 char school[50]; 07 cout<<"请输入你的姓名:"<<endl; 08 cin>>name;//使用cin读取一串字符到字符数组name中 09 cout<<"请输入你所在的学校名:"<<endl; 10 cin. getline(school,50);//使用getline函数读取一串字符到字符数组 11 //school中 12 cout<<"你的名字是:"<<name<<endl; 13 cout<<"你所在的学校名:"<<school<<endl; 14 return 0; 15 }
输出结果如下所示。
请输入你的姓名: Nedved(注:键盘输入) 请输入你所在的学校名: 你的名字是:Nedved 你所在的学校是:
【代码解析】代码第10行,调用cin.getline()时,用户还没来得及输入学校名,程序就结束了,问题在于,在使用cin读取C风格字符串或其他变量时,用户敲击回车键输入的换行符留在了输入队列中,后面的get()或getline()函数看到换行符时,会认为已经到达行尾,却没有任何可读取的内容,因此,school会是只有一个'\0'的空字符串,解决的方法同样是在cin语句的后面使用“cin.get();”,即采用下面的语句序列。
cin>>…… cin.get();
注意
上述语句的一个简洁写法为“(cin>>……).get();”。