【问题标题】:Getting line from a txt file using fstream使用 fstream 从 txt 文件中获取行
【发布时间】:2013-11-08 19:05:02
【问题描述】:
int main(int argc, const char * argv[])
{
    ifstream input;
    input.open("test.txt");
    string arrAtoms[700];
    string temp;
    int i = 0;
    while(getline(input, temp)){
        if(startsWithAtom(temp)) {
            arrAtoms[i] = temp;
            i++;
        }
    }
    return 0;                
}

bool startsWithAtom(string test) {
    string atom = "ATOM";
    if(test.find(atom) == 0) {
        return true;
    }
    return false;
}

所以这是我的代码,用于读取一行并将其存储在 arrAtoms[] 中(如果它以“ATOM”开头)。 出于某种原因,我不断收到错误 Thread1: EXC_BAD_ACCESS(code=EXC_1386_GPFLT) 我不知道为什么。请帮忙!

【问题讨论】:

  • 您应该在读取文件之前进行测试以确保文件已打开。

标签: c++ fstream getline


【解决方案1】:

代码在我的机器上运行良好。也许问题在于该文件的 ATOM 条目多于 700 个?而且您的字符串数组只能包含 700。如果您不知道会有多少条目,请尝试使用 vector

这是我测试代码的文件:

soadiaodiaodsa
sdaiod sadoiasoda
ATOM alodaskd
ATOM 阿洛萨德
ATOM 哈哈
saodai aosdisoad daiosiadsa
原子原子原子
ATOM LOL 测试
哈哈哈哈哈

我还尝试输出数组中的前 15 个条目,它工作正常,并且只包含以 ATOM 开头的行:

for(unsigned int i=0;i<15;i++)
  cout << arrAtoms[i] << endl;

【讨论】:

  • 谢谢!不了解向量(仍在学习编程基础知识)。
【解决方案2】:

您正在使用长度为 700 的 array。如果您的文件有超过 700 行以“ATOM”开头的行,则会发生内存分配错误。一个更好的方法是使用vector,这样你就不用担心文件的大小了。

#include <vector>
int main(int argc, const char * argv[])
{
    ifstream input;
    input.open("test.txt");
    std::vector <string> arrAtoms;
    string temp;
    while(getline(input, temp)){
    if(startsWithAtom(temp)) {
        arrAtoms.push_back(temp);
      }
    }
    return 0;                
}

【讨论】:

  • 谢谢!不了解向量(仍在学习编程基础知识)。
猜你喜欢
  • 1970-01-01
  • 2020-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多