c++ - 如何使用 cin.get() 来检测空的用户输入?

标签 c++ input

我写了一些代码来检测空的用户输入:

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/

相关文章:

input - 在 Go 中,使用递归扫描一行中的数字

javascript - 如何在 HTML 中使用相同的输入值来拥有一个输入字段、两个按钮和两个操作

c++ - 我应该使用 const shared_ptr<T>& 还是 shared_ptr<T> 作为我的 lambda 函数的参数?

c++ - 使用带有 STL 容器的 boost.serialization 作为模板参数

当有 2 个指针指向相同的内存位置时,C++ 删除一个指针

variables - 从命令行询问两个整数 - Golang

javascript - 单击屏幕或任何元素以执行功能

java - 如何在scanner.nextDouble()中使用两个分隔符? java

c++ - 为什么这个函数对负数不起作用?

c++ - cout 打印十六进制而不是十进制