我写了一些代码来检测空的用户输入:
if(cin.get() == '\n')
{
cout<<"ENTER WAS PRESSED"<<endl;
}
但出于某种原因,如果用户按下 ENTER,它只会在我按下 ENTER 时继续前进到下一行。
最佳答案
在这种形式下,您的代码对我有用:
#include <iostream>
int main() {
while (true) {
if (std::cin.get() == '\n') {
std::cout<<"ENTER WAS PRESSED"<<std::endl;
}
}
return 0;
}
但是,您的进一步评论表明您的代码还包括:
while(!(cin >> number) || (number < 0 || number > 3) || (cin.get() == '\n'))
有你的麻烦。
您正在尝试的方法不适用于那个特定的 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()
,但不要在同一个程序中同时使用。现在,同时使用两者会让您感到困惑,这是可以理解的。流输入可能很棘手。在您清楚地记住这一点之前,您不太可能从进一步的解释中受益,这可能需要您进行一个小时的试验和试验。祝你好运。
关于c++ - 如何使用 cin.get() 来检测空的用户输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17622424/