cin.ignore()究竟做了什么?

时间:2015-11-22 23:22:50

标签: c++ cin

我的教授告诉我,每次使用cin时,我都应该始终使用cin.ignore(100, '\n')。但是,我从来不明白为什么?

以下是一个例子:

const int MAX = 200;
char input[MAX];

cout << "Enter something: ";
    cin.get(input, MAX);
    cin.ignore(100, '\n'); //why necessary?!!

2 个答案:

答案 0 :(得分:6)

您不需要在每个时间使用ignore ,但最好在格式化输入后使用,或者在您只读取指定数量的情况下使用。

在你的例子中,如果我输入超过200个字符,任何未来的输入都可能会让你大吃一惊。

char input[200];
std::cin.get(input, 200);

执行此操作后,前两个字符被提取,但之后的任何内容仍然位于流中。它还在其中留下换行符('\n')。在此之后,只要你想要提取输入,它就会读入我们之前输入的剩余字符。

格式化输入也会发生这种情况。举个例子:

int age;
std::string name;
std::cin >> age;
std::getline(std::cin, name);

你想要的是输入一个年龄,如32,和一个名字,如“鲍勃”。输入年龄会发生什么,程序会跳过读取名称。当std::cin使用>>读取变量时,会通过按Enter键保留放入流中的'\n'字符。然后,getline读取该换行符并停止,因为它触及换行并认为已完成。

ignore通过丢弃所有内容(包括下一个换行符)来解决此问题,以便额外的输入不会影响将来的读取。

std::cin.ignore(std::numeric_limits<std::streamsize>::max());

答案 1 :(得分:0)

  

cin.ignore(100,'\ n');

忽略前100个字符,但如果函数在忽略100个字符之前遇到'\ n',则该函数将停止丢弃字符。因此,我假设您的教授希望您忽略该行上的其余数据,除非它超过100个字符。