int row,column;
for (;;) {
cin >> rows >> columns;
if (!rows && !columns) break;
vector<char> dots(rows * columns);
copy(istream_iterator<char>(cin), istream_iterator<char>(), dots.begin());
// process vector
copy(dots.begin(), dots.end(), ostream_iterator<char>(cout, " "));
cout << '\n';
}
答案 0 :(得分:3)
嗯,你在那个循环中有一个cout << '\n';
...因此每次循环都会打印newline
。
答案 1 :(得分:3)
当输入错误或文件结束发生时,istream_iterator
到达终点(缓冲区溢出可能会导致向量不计数:))。
一旦cin
出现错误或EOF状态,所有后续输入操作都将失败(除非您cin.clear();
状态)并且代码最终只显示换行符。
目前还不清楚这是否是你真正想要的。也许您只想阅读rows*column
个字符(可能会丢弃输入中的换行符)。
答案 2 :(得分:1)
您需要初始化变量,行和列(可能为0)。进入是一个很好的习惯。
答案 3 :(得分:0)
因为:
for(;;)
哪个代表'永远这样做'结合了行和列可能永远不会被cin设置为零的事实。
尝试为cin输入键入零,它可能会结束。
还写:
cout << endl;
这就是我的工作,因为我喜欢冲洗缓冲区。
答案 4 :(得分:0)
嗯,它并没有真正回答你的问题,但你可以把你的两个copy
合二为一,
copy(istream_iterator<char>(cin), istream_iterator<char>(), ostream_iterator<char>(cout, " "));
答案 5 :(得分:0)
我不认为这一行:
copy(istream_iterator<char>(cin), istream_iterator<char>(), dots.begin());
正在做你想做的事情...我不确定你是否可以用这种方式使用cin副本,因为我不认为istream_iterator<char>()
将是一个指向最后一个元素的迭代器你想读。这是一个例子吗?
答案 6 :(得分:0)
您是否打算将行和列初始化为某个值,然后减少它们或其他什么?就目前而言,有时候你的代码会永远存在,有时它会在循环的第一次运行之前退出,直到它做任何有趣的事情。