2011-11-02 82 views
3

我正在使用以下循环从控制台读取未知数量的行,但它不工作。在输入完输入后,我一直按住Enter键,但循环不停止。从C++中读取未知数量的控制台线

vector<string> file;  
string line; 
while(getline(cin,line) 
    file.push_back(line); 
+2

你怎么想知道什么时候停止收集? –

+0

您需要使用特殊字符或程序等待的关键字。当输入时,你可以停止收集线。 – anio

+1

“空行”和“无行”之间有区别。 –

回答

0

您应该将文件结尾标记为您的应用程序。在Linux上它是Ctrl-d,它可能是按Ctrl-Z在某些Microsoft系统

而且你的应用程序应该使用eof()

+0

问题不在于阅读表单文件,而是从控制台。 –

+3

@Luchian:我不同意。我认为Ctrl-D或Ctrl-Z是OP正在寻找的东西。但是,我认为'eof()'建议关闭了。如果不是那样,我会投票。 –

+0

“在我输入完输入后,我一直按住Enter键,但循环不停止。” - 我认为他正在寻找一个解决方案,按回车键退出循环;我觉得很清楚。 –

5

因为getline将评估为真实的,即使你只推的文件结束的条件的测试输入。

您需要将读取的string与空字符串进行比较,如果为true,则将其中断。

vector<string> file;  
string line; 
while(getline(cin,line)) 
{ 
    if (line.empty()) 
     break; 
    file.push_back(line); 
} 
+0

与换行比较并不是必须的,因为它不会发生,因为getline()从返回中剥离了分隔符:http://www.cplusplus.com/reference/string/getline/ – nickb

+0

'aight,我编辑了我的回答,谢谢。 –

+1

@LuchianGrigore你能帮我吗?尽管我使用了相同的代码,但是当我刚刚输入时,它不会从循环中出来。 –

1

尝试:

vector<string> file;  
string line; 
while(getline(cin,line)) 
{ 
    if(line.empty()) 
     break; 
    file.push_back(line); 
}