C++ 如何从while(getline(cin,tmp))跳转?

C++ 如何从while(getline(cin,tmp))跳转?,c++,stl,io,C++,Stl,Io,我正在读《通用编程和stl》 在第一章中,这是一个这样的例子 int main() { vector<string> v; string tmp; while(getline(cin,tmp)) //problem is here, it keep asking me to input value v.push_back(tmp); sort(v.begin(), v.end()); copy(v.begin(), v.e

我正在读《通用编程和stl》

在第一章中,这是一个这样的例子

int main()
{
    vector<string> v;
    string tmp;

    while(getline(cin,tmp))  //problem is here, it keep asking me to input value
        v.push_back(tmp);

    sort(v.begin(), v.end());
    copy(v.begin(), v.end(), ostream_iterator<string>(cout,"\n"));

    return 0;
 }
intmain()
{
向量v;
串tmp;
虽然(getline(cin,tmp))//问题在这里,但它一直要求我输入值
v、 推回(tmp);
排序(v.begin(),v.end());
复制(v.begin(),v.end(),ostream_迭代器(cout,“\n”);
返回0;
}

我如何摆脱它,它一直要求我输入值,没有结束…

发送文件结束字符:您可以使用CTRL-Z返回(Windows)或CTRL-D(Unix终端)。然后,
getline
将返回false,因为没有更多内容可从
stdin
读取


另一种方法是:通过管道将另一个程序的输出传输到此程序。

您的程序要求输入,直到到达指定位置。在类UNIX系统上使用CtrlD或在Windows上使用CtrlZ发送EOF以指示输入结束。

因为您基本上没有比较while循环中的任何内容,所以您只给出了迭代器,而没有给出退出的条件

因此,添加一个var并增加循环,在五次迭代后,循环应该退出

int x=0;
While(getline(cin,tmp),x!=5){
     //other code

 x++;
 }

cin
!=
stdin
,即使它们指向相同的低级句柄/描述符/任何东西。@Chris:是的,但是
stdin
C
文件*
指针不同于“标准输入”概念,即从主机环境提供给程序的输入流。贝努伊特指的是后者。@Adam Rosenield:这确实是我所说的,我不打算使用C标题中的
stdin
。谢谢你的建议。但我认为问题的关键在于EOF标志。@Rob:useXXX for theme:FooBar!,编辑:不在评论中工作。。。