好的,所以这就是杀了我,因为我的程序这么简单的一部分,只是不想工作。我正在从文本文件中读取数据以在GA中使用。
第一个getline()工作正常,但第二个不想将任何数据写入我的字符串。当我输入字符串时它没有显示任何内容。
以下是代码:
ifstream inFile;
inFile.open(fname.c_str());
char pop[20], mut[20];
inFile.getline(pop,20);
cout << pop;
inFile.getline(mut,20);
cout << mut; //this outputs nothing
提前感谢您的帮助。 我的文件中的示例: 他们之间没有界线突变是人口之后的直线
人口规模:30
突变:20
答案 0 :(得分:3)
您的文件的第一行长度为20个字符(19 +新行),但pop[20]
只能包含19个(因为最后一行是为空终止符'\ 0'保留的。)
当istream::getline
因为提取了20-1个字符而停止时,它不会丢弃新的行分隔符(因为它从未被读取)。因此,下一个getline
只会读取第一个行的结尾,丢弃新行。
这就是你在第二个字符串中什么也得不到的原因。
答案 1 :(得分:2)
您的问题是输入行的长度超过了必须保留它的缓冲区的长度。
解决方案是不使用字符数组。这是C ++,使用std::string
!
std::ifstream inFile;
inFile.open(fname.c_str());
std::string pop;
std::getline(inFile, pop);
cout << pop << "\n";
std::string mut;
std::getline(inFile, mut);
cout << mut << "\n";
答案 2 :(得分:1)
我认为你需要找出问题所在。将错误检查代码添加到getline
调用中,将(简单)代码重构为(简单)函数,并使用(简单)单元测试。可能,你的第二行比假定的20个字符长(包含空名!)。
要了解我的意思,请查看this snippet。
答案 3 :(得分:0)
尝试类似
的内容while (getline(in,line,'\n')){
//do something with line
}
或尝试类似
的内容string text;
string temp;
ifstream file;
file.open ("test_text.txt");
while (!file.eof())
{
getline (file, temp);
text.append (temp); // Added this line
}