Cin.Ignore()无效

时间:2012-02-19 13:29:20

标签: c++ cin

这里我有一个代码:

cout << "Press Enter To Exit...";
cin.ignore();

此程序将执行并等待您按Enter键然后它将退出。 现在看到这段代码:

int m;
cin >> m;
cout << "Press Enter To Exit...";
cin.ignore();

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

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

4 个答案:

答案 0 :(得分:4)

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

你也应该知道:

如果使用:

- &gt; cin<<之后您应该调用cin.ignore(),因为它不会消耗结束行字符'\ n',这会在您下次请求输入时消耗不必要的结果 比如程序没有等你输入任何内容。

- &gt; cin.get()您不应该调用cin.ignore(),因为它会消耗'\ n'

- &gt; getline(cin,yourstring)(获取包含结束符字符的整个输入行)你也不应该使用cin.ignore()

答案 1 :(得分:2)

使用

int m;
cin >> m;
cin.ignore();

cout << "Press Enter To Exit...";
cin.ignore();

答案 2 :(得分:1)

当您使用cin >> m键入m值然后按Enter键时,输入'\n'进入缓冲区,cin.ignore();忽略它并且程序结束。

答案 3 :(得分:0)

使用此功能。

std::cin.sync(); std::cin.get();