C++ 使用IOSTREAM在同一行进行输出和输入

C++ 使用IOSTREAM在同一行进行输出和输入,c++,io,iostream,C++,Io,Iostream,我想在同一个语句中使用iostream输入和输出操作符,这不是为了更好地对待用户,而是因为我尝试的外观没有成功获得 代码片段: int value = 0; std::cout << "Number 1: " << std::cin >> value << std::endl; int值=0; std::cout valuestd::cout>value; 应该可以做到这一点。struct IO{ struct IO { templat

我想在同一个语句中使用iostream输入和输出操作符,这不是为了更好地对待用户,而是因为我尝试的外观没有成功获得

代码片段:

int value = 0;
std::cout << "Number 1: " << std::cin >> value << std::endl;
int值=0;
std::cout value
std::cout>value;
应该可以做到这一点。

struct IO{
struct IO {
    template <typename T>
    const IO & operator << (const T & t) const {
        std :: cout << t;
        return *this;
    }

    template <typename T>
    const IO & operator >> (T & t) const {
        std :: cin >> t;
        return *this;
    }
};

IO () << "Number 1: " >> value;
模板 常量IO和操作员(T&T)常量{ 标准:cin>>t; 归还*这个; } }; IO()>值;
有点乱,但我想这正是你想要的

std::cout<<"Data : "<<val<<std::endl<<(std::cin>>val)<<"\r"<<"\t\r\n"<<std::flush;

std::我知道是这样的,但我希望另一半能给我和其他人带来挑战。OP特别要求提供一个替代方案。Plz2readTheQ!这是一个愚蠢的约束,因为它会降低代码的可读性,但会替换第一个
,并连接这些行,就满足了约束条件。请注意,“接受”答案使用了大约15行。甚至比我做的还要多。James,这些额外的行可以进入标题/库并被重用。或者您想删除
std
命名空间中所有额外的行并坚持使用printf吗?抱歉,但在这里它不起作用。我不知道我的实现是否有问题。@Bruno:“不工作”是你在这里可能说的第二个最不有用的东西,仅次于“香蕉!”它想要常量限定,因为
IO()@spraff:但是你返回了非常量
IO&
。我并不反对,但我认为它比你说的要复杂一点。它不喜欢最后的
std::endl
。std::endl的类型是什么?使用cout和cin可以保持代码的可读性;一堆>>>>
std::cout<<"Data : "<<val<<std::endl<<(std::cin>>val)<<"\r"<<"\t\r\n"<<std::flush;