我想把一個cout和一個cin放在同一行上,所以cout << "Person 1:" <<cin>> int p1;
。有人知道我可以成功做同樣的事情嗎?如何將cout和cin放在同一行上?
我使用C++上repl.it是否有幫助
我想把一個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
爲什麼?!?!你是否正在努力編寫難以理解的代碼? –