【问题标题】:Output and Input at Same Line using IOSTREAM使用 IOSTREAM 在同一行输出和输入
【发布时间】:2011-09-29 16:07:23
【问题描述】:

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

代码片段:

int value = 0;
std::cout << "Number 1: " << std::cin >> value << std::endl;

有没有办法只使用 cin cout 来做到这一点?

【问题讨论】:

  • 使用 cout 和 cin 保持代码可读性;一堆 > >> >

标签: c++ io iostream


【解决方案1】:
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;

【讨论】:

  • 对不起,但在这里它不起作用。我不知道是不是我的实施问题。
  • @Bruno:“不工作”是您可能在这里说的第二个最没用的东西,仅次于“香蕉!”
  • 它希望是 const 限定的,因为 IO()&lt;&lt;foo 产生对临时的 const 引用。现已修复。
  • @spraff:然而你返回的是非常量IO&amp;。我不反对,但我认为它比你断言的要复杂一些。
  • 它不喜欢最后的std::endlstd::endl 到底是什么类型的?
【解决方案2】:

有点乱,但我认为这就是你想要的

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

【讨论】:

    【解决方案3】:
    std::cout << "Number 1: ";
    std::cin >> value;
    

    应该做的伎俩。

    【讨论】:

    • 我知道这样,但我希望另一半对我和其他人发起挑战。
    • OP 专门要求提供一个替代方案。请阅读TheQ!
    • 这是一个愚蠢的约束,因为它降低了代码的可读性,但是将第一个 ; 替换为 ,,然后加入这些行,就满足了约束。
    • 请注意,“接受”的答案使用了 15 行。甚至比我做的还要多。
    • James,那些额外的行可以进入标题/库并被重用。还是您想删除 std 命名空间中的所有多余行并坚持使用 printf?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-30
    • 1970-01-01
    相关资源
    最近更新 更多