2017-10-05 420 views
0

我想把一個cout和一個cin放在同一行上,所以cout << "Person 1:" <<cin>> int p1;。有人知道我可以成功做同樣的事情嗎?如何將cout和cin放在同一行上?

我使用C++上repl.it是否有幫助

+0

是嘗試分號來分隔兩個不同的語句 - 你可以把多個語句在同一行(雖然頻繁,使得它很難把一個在調試器中的第二個或更後的語句中的斷點)。 – davidbak

+0

我不明白爲什麼有這種必要把它放在一行。最好編寫一個可讀且易於調試的代碼,而不是隻保存一行代碼。 – rcs

+0

爲什麼?!?!你是否正在努力編寫難以理解的代碼? –

回答

0

你不能這樣做,在一個命令/聲明。

你需要做的是這樣的:

int p1; 
cout << "Person 1:"; 
cin >> p1; 
2

您顯示的代碼將無法正常工作,因爲你不能傳遞一個std::istream(如std::cin)到std::ostream(如std::cout)的operator<<。您需要將表達式分開,方法是將它們分開:

0

所有流操作符是返回流對象。 cincoutistreamostream類的全局實例。當您使用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中。

0

你可以寫:

int p1 = (cin >> (cout << "Person 1: ", p1), p1); 

這將是一個可怕的想法在字跡清晰的代碼,我主要是張貼在迴應其他幾個方面誰說,這實際上不可能。

0

我不知道爲什麼你想這樣做,這是想這樣做,但我仍然會嘗試回答你。

您可以將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 
+0

兩個操作數都在'namespace std'中的重載操作符意味着它不會被ADL找到;它發生在這個玩具程序中,但會在使用命名空間的大型程序中失敗 –

+0

哦,我知道,我正在展示OP可以運行問題中發佈的代碼行的方式。並不意味着我建議這樣做。 –