2

好的,所以这正在杀死我,因为它是我程序中如此简单的一部分,只是不想工作。我正在从文本文件中读取数据以在 GA 中使用。

第一个 getline() 完美运行,但第二个不想将任何数据写入我的字符串。当我 cout 字符串时,它不显示任何内容。

这是代码:

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

4

4 回答 4

3

您的文件的第一行有 20 个字符长(19+新行),但pop[20]只能包含 19 个字符(因为最后一行是为空终止符“\0”保留的)。

istream::getline因为提取了 20-1 个字符而停止时,它不会丢弃新的行分隔符(因为它从未被读取)。所以 nextgetline只是读取第一行的结尾,丢弃新行。

这就是为什么你在第二个字符串中什么都没有。

于 2012-11-04T07:50:10.813 回答
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";
于 2012-11-04T08:53:43.687 回答
1

我认为你需要找出问题所在。将错误检查代码添加到您的getline调用中,将(简单)代码重构为(简单)函数,并带有(简单)单元测试。可能,您的第二行比假设的 20 个字符长(包括空词!)。

要了解我的意思,请查看此代码段

于 2012-11-04T07:25:39.360 回答
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
  }
于 2012-11-04T07:03:01.710 回答