我的教授告诉我,每次使用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?!!
答案 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个字符。