我写了一些代码来检测空的用户输入:
if(cin.get() == '\n')
{
cout<<"ENTER WAS PRESSED"<<endl;
}
Run Code Online (Sandbox Code Playgroud)
但由于某些原因,如果用户按下ENTER,它只是按下ENTER继续前进到下一行.
在这种形式下,您的代码适合我:
#include <iostream>
int main() {
while (true) {
if (std::cin.get() == '\n') {
std::cout<<"ENTER WAS PRESSED"<<std::endl;
}
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但是,您的进一步评论显示您的代码还包括:
while(!(cin >> number) || (number < 0 || number > 3) || (cin.get() == '\n'))
Run Code Online (Sandbox Code Playgroud)
你有麻烦.
你正在尝试的东西不适用于那个特定的while,但许多C++的第一学期学生提出类似的问题,所以让我解释一下.它不起作用的原因是你的概念std::cin是模糊的.(顺便说一句,std::cin请,或者如果必须cin的using std::cin;话,请先写下.告诉你要发行的教科书using namespace std;应该被烧掉.)
对象std::cin是一个流 - 从您的角度来看,一个队列,当您希望这样做时,您的程序可以从中接受可用的输入字符.重要提示: std::cin不是命令或操作,而是称为流的对象.通过类比语音,你可能会将其std::cin视为一个动词,只有它不是:它是一个名词.就其本身而言,std::cin什么都不做.
什么做的是提取操作符>>.什么也是单字符提取成员函数.get().这两个都从流中检索以前看不见的字符std::cin.因此,>>检索程序放入的一些字符number,然后进行测试.然后.get()检索另一个以前看不见的字符,程序检查该字符是否是换行符.但是为什么你的程序将前一组字符视为可能的数字而后一种字符作为可能的换行?它是如何知道前一组字符不是以换行符开头的?
我的建议是尝试一些简单的测试程序了一段时间,无论是使用>>或.get(),但不能同时在相同的程序.就目前而言,同时使用两者都可以让你感到困惑.流输入可能很棘手.在你明白这一点之前,你不太可能从进一步的解释中受益,这可能需要你一个小时的试验和实验.祝好运.