在C++中读取多行输入
Reading multi line inputs in C++
我正试图从C++中的命令行读取多行输入,并将它们存储到一个数组中。这是我的密码。
std::string line;
int in;
std::vector<std::string> v;
while(std::getline(std::cin, line)){
if(line == "^D") break;
v.push_back(line);
}
for(auto it = v.begin(); it != v.end(); it++){
std::cout<<*it<<std::endl;
}
stdin进入了一个无限循环,我似乎不知道如何防止它。基本上,目标行为是在没有任何输入的情况下连续按两次回车键,应终止stdin循环并运行程序。
我会测试字符串是否为空。如果是这样,就中断。像这样:
#include <string>
#include <vector>
#include <iostream>
int main(){
std::string line;
std::vector<std::string> v;
while(std::getline(std::cin, line)){
if (line.empty()){
break;
}
v.push_back(line);
}
std::vector<std::string>::iterator it;
for (it = v.begin(); it != v.end(); it++){
std::cout << *it << 'n';
}
return 0;
}
如果您真的希望循环以两个Enter停止,您可以将条件更改为
if(line == "" && v.size() >= 1 && v.back() == "") break;
它应该检查当前击键和上一次击键是否为Enter。v.size() >= 1
只是检查v中是否有任何元素,如果没有任何其他元素,则停止Segfault。
请注意,数组中的最后一个元素将是一个空字符串,如果您想去掉它,只需编写
v.pop_back();
在第一个循环之外,它去掉了最后一个元素。
while循环可能是这样的,只使用.empty():
while(std::getline(cin, line)){
if(line.empty() && !v.empty() && v.back().empty()) {
v.pop_back(); // remove the last empty line
break;
}
v.push_back(line);
}
相关文章:
- 读取文件并输入到矢量中
- 用c++从输入文件中读取另一行
- 读取文件的最后一行并输入到链接列表时出错
- 如何在C++中读取空格分隔的输入 当我们不知道输入的数量时
- 套接字读取后,我在缓冲区中看到意外输入
- 从标准输入读取文件后读取用户输入
- C++ 从标准输入读取文件名
- 从标准输入读取多个类型时出现问题
- 使用 fgets() 从键盘读取时从以前的输入读取换行符
- 从标准输入读取时zmq_poll不侦听信号
- 从超强的AndroidAudioIO输入读取缓冲区
- 如何实现将用户输入读取到提供的所有变量中的可变参数模板
- 如何使用重定向的标准输入读取文件,即cin(注意:不使用ifstream)
- 将空格分隔的输入读取到C++中的数组中
- Win32 - 从标准输入读取超时
- 从标准输入读取输入,并准备接收来自服务器的广播
- 终止将输入读取到int中的内容
- 如何从标准输入读取输入,直到按下空格或选项卡
- DirectX 11输入读取方法
- 将输入读取到动态大小的数组中