2010-10-08 107 views
0

来自澳大利亚投票问题:如何知道何时完成一个输入cin n? (循环)

机器人将继续放置信息,它可以达到1000行。什么,他会进入 例子:

"1 2 3 
2 1 3 
2 3 1 
1 2 3 
3 1 2 
" 

我怎么知道他什么时候完成进入信息?最后还有一个\ n,这是我唯一的猜测。 cin似乎没有检测到\ n,但是getchar()显然没有。然而,即使在第一线课程之后,它也会得到\ n,并且使其运作变得相当困难。我该如何做到这一点?

回答

3
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!"; 
+0

+1将他放在正确的轨道上,尽管如果循环终止处理了可选空白行,我会感到更安全。 – 2010-10-08 07:10:03

+0

谢谢你的例子,让我走了一次我想我必须有cin.ignore更早的代码lol – Russell 2010-10-08 07:41:51

+0

@Tony:我不知道你在干什么。我认为空行会终止输入? – sbi 2010-10-08 07:48:49

1

使用cin读取输入并且提取运算符>>跳过空白。相反,逐行读取输入,并在该行为空时退出。

0

您可以改为每次读取一行,然后查找空白行(然后稍后将每个非空行分割为其3个数字)。

6

我建议使用cin.getline它会得到一次一整行(用\ n结束),当你得到一个空行,你知道你就大功告成了。

编辑 作为建议的履行机构,性病::函数getline通常是针对这种情况一个更好的选择,因为它利用了string真是让人不是字符数组。

+1

我不同意这一点。 'std :: istream :: getline()'适用于原始的'char'数组 - 不是我推荐给新手的东西。自由函数'std :: getline()',自动扩展它写入的字符串,对此更好。 – sbi 2010-10-18 08:26:33

+0

@sbi:感谢您的建议;我已经修改了包含它的答案。 – JoshD 2010-10-18 19:17:43

相关问题