繁体   English   中英

如何使用cin.get()检测空用户输入?

[英]How can I use cin.get() to detect an empty user 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您尝试的内容在特定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()尝试一些更简单的测试程序一段时间,但不要在同一程序中同时使用它们。 现在,一次使用这两种方法会让您感到困惑。 流输入可能很棘手。 在您直截了当地说出这一点之前,您不太可能会从进一步的解释中受益,而这可能会花费您一个小时的试验和实验。 祝好运。

我认为这段代码可以完成您的工作。

#include <iostream>
#include <sstream>

using std::cin;
using std::cout;
using std::string;

int main()
{
    string in = "";
    int n = 0;
    while (true)
    {
        cout << "Please enter a number: ";
        getline(cin, in);
        std::stringstream s(in);
        if (s >> n)
            break;
        cout << "Invalid number, please try again\n";
     }
     return 0;
}

AFAIK,我认为您不应该使用get()函数输入数字。 get()函数旨在输入字符,其行为与未格式化的输入函数相同 >>运算符似乎对此工作更好。 如果您按ENTER键,提取运算符>>将等待您的输入,因为它将忽略它。 但是,换行输入存储在cin输入流中。 您还可以尝试结合使用peek()seekg()函数来检查输入流中是否存在现有的换行符,然后执行所需的操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM