c ++ cin输入不起作用?

时间:2011-05-04 01:06:39

标签: c++

#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:

2 个答案:

答案 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 ()