【问题标题】:Having issues using ifstream in c++在 C++ 中使用 ifstream 时遇到问题
【发布时间】:2014-12-19 14:29:03
【问题描述】:

我在使用 fstream 将文件读入向量时遇到了一些问题。我有两个类似的功能,一个用于读取,一个用于写入文件。

    void Prime::writePrimes(void){
    int i = primes.size();
    ofstream fout;
    fout.open("primes.txt", ios::out);
    if (fout.is_open()){
        for (int j = 0; j < i; j++){
            fout << primes[j] << endl;
            }
        }
    }

void Prime::readPrimes(void){
ifstream fin;
fin.open("prime.txt", ios::in);
if (fin.is_open()){
    while (fin){
        int b;
        cin >> b;
        addPrimes(b);
    }
    fin.close();
}
}

虽然 writePrime 工作得很好,但 readPrime 不会进入 if 条件。 有人有解决问题的想法吗?

【问题讨论】:

  • 你不应该有 fin &gt;&gt; b; 而不是 cin &gt;&gt; b; 吗?你确定这不是你的问题吗?
  • 您对文件的命名不同。我的意思是prime.txt 是否存在,因为你写了primes.txt
  • @PiotrS。这应该是一个答案。这也是为什么using namespace std; 是一个 主意的另一个原因。
  • @Angew 我猜文件的不同名称(单数与复数素数)是真正的问题
  • @PiotrS。对。这是一个有两个错字的问题!

标签: c++ fstream ifstream


【解决方案1】:

cin &gt;&gt; b 应该是 fin &gt;&gt; b。控制阅读循环的更好方法是

int b;
while (fin >>b)
    addPrimes(b);

【讨论】:

  • 如果没有对is_open 的无用检查,这个答案会更好(如果你不打算在它没有打开时采取一些行动,然后检查它没用,因为fin&gt;&gt;b 操作会在它没有打开时失败)
  • 感谢您指出这一点。我从来没有想过。我会编辑它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-25
  • 2015-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多