[英]Why does this code continuously print newlines?
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';
}
嗯,你有个提示cout << '\\n';
在该循环内...因此,每次循环时它将打印newline
。
当发生输入错误或文件结束时, istream_iterator
到达末尾(向量可能发生的缓冲区溢出不计入:))。
一旦cin
处于错误或EOF状态,所有后续输入操作都会失败(除非您是cin.clear();
状态),并且代码最终仅显示换行符。
尚不清楚这是否是您真正想要的。 也许您只想读取rows*column
字符(也许在输入中丢弃换行符)。
您需要初始化变量,行和列(可能为0)。 这是一个很好的习惯。
由于:
for(;;)
代表“永远做到这一点”,以及cin永远不会将行和列都设置为零的事实。
尝试输入零作为cin输入,它可能会结束。
还写:
cout << endl;
那就是我所做的,因为我喜欢刷新缓冲区。
好吧,它并不能真正回答您的问题,但是您可以将两个copy
合并为一个,因为
copy(istream_iterator<char>(cin), istream_iterator<char>(), ostream_iterator<char>(cout, " "));
我不认为这条线:
copy(istream_iterator<char>(cin), istream_iterator<char>(), dots.begin());
正在执行您想要的操作...我不确定是否可以通过这种方式与cin一起使用copy,因为我认为istream_iterator<char>()
不会是指向您想要的最后一个元素的迭代器读书。 这是某个地方的例子吗?
您是否打算将您的行和列初始化为某个值,然后将其减一? 就目前而言,有时您的代码将永远继续下去,有时甚至在执行任何有趣的操作之前都会在循环的第一次运行中退出。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.