#include <iostream>
#include <string>
struct Car{
std::string model;
unsigned int year;
};
int main(){
using namespace std;
int carNum;
cout << "How many cars do you wish you catalog? ";
cin >> carNum;
Car * cars = new Car[carNum];
for (int i=0;i<carNum;i++){
cout << "Car #" << i << endl;
cout << "Please enter the make: ";
getline(cin, cars[i].model);
cout << "Please enter the year made: ";
cars[i].year = cin.get();
}
cout << "Here's your collection" << endl;
for (int i=0;i<carNum;i++){
cout << cars[i].model << " " << cars[i].year << endl;
}
delete [] cars;
return 0;
}
当我执行程序时,getline(cin, car[i].model)
只是被跳过。这是为什么?
Car #2 Please enter the make: Please enter the year made:
答案 0 :(得分:10)
原因很简单。
当您执行cin >> whatever
时,会留下\n
(当您按Enter键时添加了它)。默认情况下,getline
会一直读到下一个\n
,因此下一次读取只会读取一个空字符串。
解决方案是丢弃\n
。你可以这样做:
cin.ignore(numeric_limits<streamsize>::max(),'\n');
在cin >> carNum
之后。
不要忘记包含limits
以使用numeric_limits
。
答案 1 :(得分:0)
使用插入运算符进行每次cin调用之后。如果您希望cin.ignore()
工作,则必须致电cin.getline ()
。
as cin&gt;&gt;当你按Enter键时留下一个'\ n'字符,因此当你使用getline()时,它会选择\n
并且在输入流中找到\n
时没有输入,这是默认分隔符。
因此,您可以在每个cin&gt;&gt;之后执行cin.ignore ()
或者只是设置分隔符cin.getline ()