来自澳大利亚投票问题:如何知道何时完成一个输入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