枚举类型不能接受 CIN 命令

enum type can not accept cin command

本文关键字:命令 CIN 不能接受 类型 枚举      更新时间:2023-10-16

请看这段代码:

#include <iostream>
using namespace std;
int main()
{
    enum object {s,k,g};
    object o,t;
    cout << "Player One: "; cin >> o;
    cout << "Player Two: "; cin >> t;
    if (o==s && t==g) cout << "The Winner is Player One.n";
    else if (o==k && t==s) cout << "The Winner is Player One.n";
    else if (o==g && t==k) cout << "The Winner is Player One.n";
    else if (o==g && t==s) cout << "The Winner is Player Two.n";
    else if (o==s && t==k) cout << "The Winner is Player Two.n";
    else if (o==k && t==g) cout << "The Winner is Player Two.n";
    else cout << "No One is the Winner.n";
        return 0;
}

编译时,我会得到这个错误:no match for 'operator>>' in 'std::cin >> o我正在使用代码块。那么这段代码有什么问题呢?

枚举没有运算符>>()。您可以自己实现一个:

std::istream& operator>>( std::istream& is, object& i )
{
    int tmp ;
    if ( is >> tmp )
        i = static_cast<object>( tmp ) ;
    return is ;
}

当然,如果你只输入一个整数并投射自己会更容易。只是想向您展示如何编写 cin>>运算符。

您是否希望能够键入"s","k"或"g"并将它们解析为枚举类型? 如果是这样,则需要定义自己的流运算符,如下所示:

std::istream& operator>>(std::istream& is, object& obj) {
    std::string text;
    if (is >> text) {
        if (text == "s") {
            obj = s;
        }
        // TODO: else-if blocks for other values
        // TODO: else block to set the stream state to failed
    }
    return is;
}

如果您不熟悉运算符重载概念并希望快速修复,只需使用:

scanf("%d%d", &o, &t);