Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ c++;:将可变数量的输入存储到字符缓冲区中_C++_User Input - Fatal编程技术网

C++ c++;:将可变数量的输入存储到字符缓冲区中

C++ c++;:将可变数量的输入存储到字符缓冲区中,c++,user-input,C++,User Input,我需要格式化我的程序,以获取可变的输入量。通过变量,我的意思是输入中的行数是未知的。输入应按如下方式传递: cat input | ./myProg 我编写了这个版本的程序,它成功地获取了一行输入,将其存储到一个字符缓冲区,并打印到控制台: #include <iostream> #include <fstream> using namespace std; int main(void) { char outputData[1024]; cin.ge

我需要格式化我的程序,以获取可变的输入量。通过变量,我的意思是输入中的行数是未知的。输入应按如下方式传递:

cat input | ./myProg
我编写了这个版本的程序,它成功地获取了一行输入,将其存储到一个字符缓冲区,并打印到控制台:

#include <iostream>
#include <fstream>
using namespace std;

int main(void)
{
    char outputData[1024];

    cin.getline(outputData,1024);

    cout << outputData;

    return 0;
}
#include <iostream>
#include <fstream>
using namespace std;

int main(void)
{    
    char outputData[1024];

    while(!cin.eof())
    {
    cin.getline(outputData,1024);
    }

    cout << outputData;

    return 0;
}
#包括
#包括
使用名称空间std;
内部主(空)
{
字符输出数据[1024];
cin.getline(outputData,1024);

不能使用字符串和向量

#include <vector>
#include <string>
#include <iostream>

std::vector<std::string> lines;

for (std::string line; std::getline(std::cin, line); )
{
    v.push_back(std::move(line));
}
#包括
#包括
#包括
std::矢量线;
for(std::string-line;std::getline(std::cin,line);)
{
v、 向后推(标准::移动(线));
}

在有人来建议istream迭代器和子类化
std::string
之前,我敢说你可以用更少的代码来完成:-)

使用字符串和向量

#include <vector>
#include <string>
#include <iostream>

std::vector<std::string> lines;

for (std::string line; std::getline(std::cin, line); )
{
    v.push_back(std::move(line));
}
#包括
#包括
#包括
std::矢量线;
for(std::string-line;std::getline(std::cin,line);)
{
v、 向后推(标准::移动(线));
}

在有人来建议istream迭代器和子类化
std::string
之前,我敢说你可以用更少的代码来完成:-)

在你当前的解决方案中,你会覆盖每个循环中缓冲区的内容,所以它显然不会像你想要的那样打印每一行

无论如何,您应该使用
std::string
如果您想存储可变数量的字符,您当前的代码将只适用于1024个字符或更少的行。要存储任意数量的行,您可以将所有行连接成一个大的std::string,或者如果您想更方便地每行访问,可以将它们存储在
s中TS::字符串的向量< /代码>。直接读入代码> STD::String ,让C++处理内存管理,使用<代码> STD::GETLION()/CUT>代替<代码> CIN。GETLION()< <代码> < /P>
#包括
#包括
#包括
int main()
{
std::字符串行;
std::矢量线;
while(std::getline(std::cin,line)){
线。推回(线);
}
//对行进行处理,例如,通过迭代向量来打印行
//并打印其中的每个字符串
}

在当前的解决方案中,每个循环都会覆盖缓冲区的内容,因此它显然不会像您希望的那样打印每一行

无论如何,您应该使用
std::string
如果您想存储可变数量的字符,您当前的代码将只适用于1024个字符或更少的行。要存储任意数量的行,您可以将所有行连接成一个大的std::string,或者如果您想更方便地每行访问,可以将它们存储在
s中TS::字符串的向量< /代码>。直接读入代码> STD::String ,让C++处理内存管理,使用<代码> STD::GETLION()/CUT>代替<代码> CIN。GETLION()< <代码> < /P>
#包括
#包括
#包括
int main()
{
std::字符串行;
std::矢量线;
while(std::getline(std::cin,line)){
线。推回(线);
}
//对行进行处理,例如,通过迭代向量来打印行
//并打印其中的每个字符串
}

关于或甚至如何?关于或甚至如何?使用
std::move()可以吗
像这样吗?据我所知,在移动完成后,实现可以自由地假设从中移动的变量不会被重复使用,但在这里,它将在每个输入行中再次使用。@reko\u t:很好。移动后对象处于有效状态。是的,只是查找了它,似乎很好,感谢您的澄清。:)@BoPersson:每个循环都是
for
循环:-)没有其他类型的循环在足够紧的范围内包含iterant变量。可以使用
std::move()吗
像这样吗?据我所知,在移动完成后,实现可以自由地假设从中移动的变量不会被重复使用,但在这里,它将在每个输入行中再次使用。@reko\u t:很好。移动后对象处于有效状态。是的,只是查找了它,似乎很好,感谢您的澄清。:)@BoPersson:每个循环都是
for
循环:-)没有其他类型的循环在足够紧的范围内包含iterant变量。