來自澳大利亞投票問題:如何知道何時完成一個輸入cin n? (循環)
機器人將繼續放置信息,它可以達到1000行。什麼,他會進入 例子:
"1 2 3
2 1 3
2 3 1
1 2 3
3 1 2
"
我怎麼知道他什麼時候完成進入信息?最後還有一個\ n,這是我唯一的猜測。 cin似乎沒有檢測到\ n,但是getchar()顯然沒有。然而,即使在第一線課程之後,它也會得到\ n,並且使其運作變得相當困難。我該如何做到這一點?
來自澳大利亞投票問題:如何知道何時完成一個輸入cin n? (循環)
機器人將繼續放置信息,它可以達到1000行。什麼,他會進入 例子:
"1 2 3
2 1 3
2 3 1
1 2 3
3 1 2
"
我怎麼知道他什麼時候完成進入信息?最後還有一個\ n,這是我唯一的猜測。 cin似乎沒有檢測到\ n,但是getchar()顯然沒有。然而,即使在第一線課程之後,它也會得到\ n,並且使其運作變得相當困難。我該如何做到這一點?
std::string line;
while(std::getline(std::cin,line) && !line.empty()) {
std::istringstream iss(line);
int i1, i2, i3;
iss >> i1 >> i2 >> i3
if(!is) throw "dammit!"
process_numbers(i1,i2,i3);
}
if(!std::cin.good() && !std::cin.eof()) throw "dammit!";
使用cin
讀取輸入並且提取運算符>>
跳過空白。相反,逐行讀取輸入,並在該行爲空時退出。
您可以改爲每次讀取一行,然後查找空白行(然後稍後將每個非空行分割爲其3個數字)。
我建議使用cin.getline
它會得到一次一整行(用\ n結束),當你得到一個空行,你知道你就大功告成了。
編輯 作爲建議的履行機構,性病::函數getline通常是針對這種情況一個更好的選擇,因爲它利用了string
真是讓人不是字符數組。
+1將他放在正確的軌道上,儘管如果循環終止處理了可選空白行,我會感到更安全。 – 2010-10-08 07:10:03
謝謝你的例子,讓我走了一次我想我必須有cin.ignore更早的代碼lol – Russell 2010-10-08 07:41:51
@Tony:我不知道你在幹什麼。我認爲空行會終止輸入? – sbi 2010-10-08 07:48:49