如何将cout和cin放在同一行上?
我想把一个cout和一个cin放在同一行上,所以cout << "Person 1:" <<cin>> int p1;
。有人知道我可以成功做同样的事情吗?如何将cout和cin放在同一行上?
我使用C++上repl.it是否有帮助
你不能这样做,在一个命令/声明。
你需要做的是这样的:
int p1;
cout << "Person 1:";
cin >> p1;
您显示的代码将无法正常工作,因为你不能传递一个std::istream
(如std::cin
)到std::ostream
(如std::cout
)的operator<<
。您需要将表达式分开,方法是将它们分开:
-
分号(Live Demo):
int p1; cout << "Person 1:"; cin >> p1;
-
int p1; cout << "Person 1:", cin >> p1;
所有流操作符是返回流对象。 cin
和cout
是istream
和ostream
类的全局实例。当您使用operator<<
/operator>>
时,它们是返回流对象以提供链接。
当你喜欢写东西std::cout << "he" << 11 << 'o'
,它提供拨打std::cout << "he"
在第一(左关联的operator<<
的情况下)。它完成了它的代码(在stdout上打印“he”)并返回左边的参数,所以现在原始行是std::cout << 11 << 'o'
,然后再次调用最左边的operator<<
,它的参数为:std::cout << 11
,控制台上现在为"he11"
,行可以是解释为std::cout << 'o'
。
返回左arg流对象即使在您的对象上也提供链接。这与输入操作员的工作相同。 stream >> x >> y;
表示从流stream
读取的值,将其存储到x
然后读取下一个值,将其存储在y
中。
你可以写:
int p1 = (cin >> (cout << "Person 1: ", p1), p1);
这将是一个可怕的想法在字迹清晰的代码,我主要是张贴在回应其他几个方面谁说,这实际上不可能。
我不知道为什么你想这样做,这是想这样做,但我仍然会尝试回答你。
您可以将istream的运算符重载为完成该任务,然后在返回istream之前使用istream的unget(),这会导致输入转到cout然后转到p1变量。这可以看出,在我下面的示例代码:
#include <iostream>
using namespace std;
istream &operator<<(ostream& out, istream& in){
int a = 0;
in >> a;
out << a;
in.unget();
return in;
}
int main()
{
int p1;
cout << "Person 1: " <<cin>> p1;
cout << "Test: " << p1 << endl;
return 0;
}
请注意,此重载是专门针对整数,不会与其他数据类型的工作。您可能会看到这个代码action here,但要注意,真正的输出实际上
Person 1: 5
5Test: 5
两个操作数都在'namespace std'中的重载操作符意味着它不会被ADL找到;它发生在这个玩具程序中,但会在使用命名空间的大型程序中失败 –
哦,我知道,我正在展示OP可以运行问题中发布的代码行的方式。并不意味着我建议这样做。 –
是尝试分号来分隔两个不同的语句 - 你可以把多个语句在同一行(虽然频繁,使得它很难把一个在调试器中的第二个或更后的语句中的断点)。 – davidbak
我不明白为什么有这种必要把它放在一行。最好编写一个可读且易于调试的代码,而不是只保存一行代码。 – rcs
为什么?!?!你是否正在努力编写难以理解的代码? –