这里我有一个代码:
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命令将跳过。为什么?我应该怎么做才能解决它?
答案 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();