这是我用cin读取整数并将它们存储在向量中的方法:
int number;
vector<int>ivec;
while (cin>>number)
{
ivec.push_back(number);
}
for (auto v: ivec){
cout << v;
}
然后,我很难解决如何停止输入整数并转移到下一个打印向量的过程。任何指针将不胜感激。感谢
答案 0 :(得分:1)
这取决于所使用的终端,并且精确的机制变化很大,但是,通常,键入Ctrl + D(Linux)或Ctrl + Z(Windows)将导致文件结束&#34;信号& #34;沿着管道传输,导致EOF位在cin
上设置,从而导致下一次cin >> number
尝试失败。
这将打破循环。
方便的是,如果您使用文件中的重定向输入运行可执行文件,则会发生相同的情况。这是重点。
答案 1 :(得分:0)
您发布的代码只要成功就会从cin
读取数字。有两种方法可以让它停止成功:如果输入的内容不是数字,则读取数据仍然成功,但将其转换为数字会失败。这会将cin
置于错误的状态。它可以使用clear
方法恢复。另一种方法是使cin
中的字符读取失败(例如,用作输入的文件的结尾)。这会将cin
置于failed
状态。通常,从失败状态恢复是不可能的。
要在键盘输入数据时生成,您无法再在文件末尾读取状态,必须使用特定于操作系统的方法(可能是Control-D或Control-Z)。这是调用程序的最终结果。
如果您需要一种方式让用户发出信号:“请继续,但让我稍后输入其他内容”,最干净的方式可能是逐行阅读cin
并使用解析输入strtol
或stringstream
,并比较魔术停止令牌(例如空行,“结束”)以退出循环。
答案 2 :(得分:0)
您可以通过以下方式执行此操作
#include <vector>
#include <iterator>
//...
vector<int> ivec( std::istream_iterator<int>( std::cin ),
std::istream_iterator<int>() );
for ( auto v: ivec ) std::cout << v << ' ';
std::cout << std::endl;
在Windows中,您必须按下组合Ctrl + z
并在UNIX系统中Ctrl + d
或者你可以介绍一个哨兵。在这种情况下,循环可能看起来像
int number;
const int sentinel = SOME_VALUE;
for ( std::cin >> number && number != sentinel ) vec.push_back( number );
答案 3 :(得分:0)
请找到问题的简单解决方案,如果您发现此解决方案存在任何问题,请与我们联系。
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> va;
int x;
while ( cin >> x ) {
va.push_back(x);
if ( cin.get() == '\n' ) break;
}
//Vector output
for ( int i = 0; i < va.size(); i++ ) {
cout << va[i] <<" ";
}
return 0;
}