Cin.Ignore() 不起作用

Ins*_*Man 1 c++ cin

这里我有一个代码:

cout << "Press Enter To Exit...";
cin.ignore();
Run Code Online (Sandbox Code Playgroud)

该程序将执行并等待您按回车键然后退出。现在看这个代码:

int m;
cin >> m;
cout << "Press Enter To Exit...";
cin.ignore();
Run Code Online (Sandbox Code Playgroud)

这次在输入一个数字以保存在“m”后,程序将退出而不等待等待按 Enter 的 cin.ignore 命令。

我的意思是如果你在 cin.ignore 之前使用 cin 命令,cin.ignore 命令将跳过。为什么?我应该怎么做才能修复它?

Joã*_*lva 5

cin.ignore()基本上清除内存中剩余的任何输入。在第一段代码中,你没有输入任何东西,因此它没有什么要清除的,因此它等待你输入一些东西。在第二段代码中,您使用了>>获取格式化输入但使结束行字符'\n'(按 ENTER 时存储的字符)在输入缓冲区中徘徊的运算符。当您调用 cin.ignore() 时,它会完成它的工作并清除相同的缓冲区。因为它已经完成了他被调用的操作,它只是让程序继续(在这种情况下到最后)。记住cin.ignore()是为了清除输入缓冲区(保存输入的小块内存),如果您希望用户在程序开始使用之前输入某些内容cin.get()

你还应该知道:

如果使用:

-> 之后cin<<您应该调用 cin.ignore() ,因为它不会消耗结束行字符 '\n',该字符将在您下次请求输入时消耗,导致不需要的结果,例如程序不等待您输入任何内容。

->cin.get()你不应该调用 cin.ignore() 因为它消耗了 '\n'

-> getline(cin,yourstring)(获取包括结束行字符在内的整个输入行)您也不应该使用 cin.ignore()