2012-08-06 152 views
0

我有例如下面的一段代碼:字符串輸入複製的文本

string str; 
int i; 
cout<<"input:"; 
cin>>str; 
cout<<"integer:"; 
cin>>i; 

其實沒有什麼不對的代碼,但如果我粘貼在「輸入」一些文本進入命令提示符,它會自動將一些複製的文本填充到「整數」中。我該如何解決這個問題?

編輯:我可以鍵入文本只要我想,但是當我複製文本它出錯了。我不知道爲什麼。

+0

您的複製文本是否包含行返回? – ereOn 2012-08-06 10:09:54

+0

你可以給你提示你在提示符下「粘貼」的樣本嗎?請使用正確和不正確的輸入會話編輯您的問題。 – 2012-08-06 10:10:22

+0

@ ereOn:是的它的確如此 – Badshah 2012-08-06 10:13:40

回答

3

我想,你的文本包含空格。所以,std::cin不會在這裏工作。改爲使用std::getline

std::string str; 
std::getline(std::cin, str); 

還有第三個參數std::getline - 分隔符。默認情況下,它是新的一行字符。


如果您的文本確實包含新的行字符,則此操作無效。你有兩個選擇:

  • 找到獨特的字符,可以用來作爲分隔符和(使用std::getline)從用戶輸入(std::cin)的線把它作爲std::getline
  • 讀取行的第三個參數,尋找一些特殊的字符串,它會告訴你的程序文本結束的地方。沒有其他辦法可以知道埃格爾在哪裏開始(除非文本是固定大小,但我懷疑)
+0

我其實已經試過了,但仍然是同樣的問題 – Badshah 2012-08-06 10:14:49

+0

@Badshah - 然後你的文本里面有新的行。看我的編輯。 – 2012-08-06 10:17:18

0
string str; 
int i; 
cout<<"input:"; 
getline(cin, str); 
// you want to read the whole line, operator>> will read until whitespace 
cout<<"integer:"; 
cin>>i;