C ++在一行上测试CIN

时间:2016-01-02 04:40:42

标签: c++ input

我最近开始自学C ++,在编写了大量用户输入代码之后,让我想知道是否有一种更简单的方法来处理它。

例如,正常的做法是这样的:

#include <iostream>
using namespace std;

int inp;
int guess = 13;

void main(){
    cout << "Guess a number: ";
    cin >> inp;
    if (inp == guess)
        cout << endl << "Nice.";
}

但我想做的是:

#include <iostream>
using namespace std;

int guess = 13;

void main(){
    cout << "Guess a number: ";
    if (cin == guess)
        cout << endl << "Even nicer.";
}

有办法做到这一点吗?或者这只是不正确的C ++标准?

2 个答案:

答案 0 :(得分:2)

简而言之:不,不可能按照你的意愿去做。

您需要了解,>>实际上是

的函数调用
template<typename T>
std::istream& operator>>(std::istream& is, T& result);

==是对

的函数调用
template<typename T>
bool operator==(const std::istream&,const T& x);

后者用于检查流状态,并且不提取任何用户输入。

要比较输入,需要从第一位std::istream中提取结果。

答案 1 :(得分:1)

嗯,你可以在一条线上完成,但你并不是真的需要。但无论如何,这里有一些例子

//This will work for a char
#include <iostream>
#include <conio.h>

using namespace std;

int main()
{
    char test = 'a';
    if (getch()== test)
        cout<<"\n Works";
    return 0;
}

如果你真的想要

#include <iostream>
#include <conio.h>

using namespace std;

int main()
{
    int x =1;
    int y;
    for( cin >> y ; x == y ; )
    {
        cout<<"\n Works";
        break;
    }
    return 0;
}

或者NathanOliver说你可以这样做

if( cin >> inp && inp == guess )

但实际上你想保持简单,因为这会在一段时间后让别人和你自己混淆。您希望尽可能简化代码