2009-12-27 59 views
1
int i,j; 

std::string s; 

std::cin>>i>>j>>s>>s>>i; 

std::cout<<i<<" "<<j<<" "<<s<<" "<<i; 

問題 參照上面的示例代碼,什麼是顯示輸出如果有輸入字符串是:「5 10示例Word 15 20」?一個問題關於給std :: cin

答案是

15 10字15

我的問題是,什麼是對CIN超過寫現有值下劃線政策?後者是否會覆蓋前一個?還有其他情況嗎?

我查了很多書,但沒有找到解釋這個的書。

回答

12
std::cin >> i >> j >> s >> s >> i; 

等同於:

std::cin >> i; 
std::cin >> j; 
std::cin >> s; 
std::cin >> s; // overwrite previous s 
std::cin >> i; // overwrite previous i 

你從CIN到變量每次讀取,該變量的原有內容被覆蓋。

所以你明確要求覆蓋si

0

當你對s重寫時,你破壞了先前的s值。 (這是SAMPLE)。我之所以保持不變的原因是因爲我的價值是/保持了15(你仍然覆蓋了我;但是,你用相同的數據覆蓋了它,15)。

+0

從原來的問題,'給出的輸入字符串是:「5 10 Sample Word 15 20」'。 'i'輸出相同值的原因是'i'在輸出之間不會改變;即'cout << i << ...'i'在寫作之間不會改變'i'的值。 – atk 2009-12-27 05:46:11

0

>>表示如果你改寫它作爲operator>>()它看起來很醜,但可能會幫助您瞭解函數調用的工作方式。

此行

std::cin >> i >> j >> s >> s >> i; 

相當於

std::cin.operator>>(i).operator>>(j).operator>>(s).operator>>(s).operator>>(i); 

operator>>()cin返回到自身的引用cin。因此,每一步都是對的operator>>()的單獨調用,保證按從左到右的順序進行。