关于C ++中导入/导出文件和重载操作符的一些问题

时间:2017-04-03 11:06:21

标签: c++ file operator-overloading fstream

我刚学会了如何在C ++中导入/导出文件。问题是关于编写一个函数读取文件FRACTION并将它们导出到屏幕。我的老师解决了这个问题并通过以下源代码教给我们:

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

struct FRACTION{
    int numerator, denominator;
};

istream& operator>>(istream& inDev, FRACTION& p){

        inDev >> p.numerator >> p.denominator;
        return inDev;
}
ostream& operator<<(ostream& outDev, FRACTION& p)
{
    outDev << p.numerator << "/" << p.denominator;
    return outDev;
}

PHANSO* ReadArrayFraction(istream& inDev, int& n){

        FRACTION* arr = NULL; cin >> n;
    if (inDev.fail() || n <= 0){ return arr; }
        arr = new FRACTION[n];
    if (arr != NULL){
        for (int i = 0; i < n; i++){
            inDev >> arr[i];
            if (inDev.fail()){
                    delete[] arr; arr = NULL; break;
            }
        }
    }
        return arr;
}

void main(){
        ifstream fs("FRACTION.txt");
    if (fs.fail()){ cout << "Can't open the file" << endl; }
        int n;
        FRACTION* arr = ReadArrayFraction(fs, n);
        for (int i = 0; i < n; i++)
        {
            cout << arr[i] << endl;
        }
}

文件FRACTION.txt:

3 4  
1 2 
2 3

我有两个问题: 1.我们怎么能把这行“inDev&gt;&gt; arr [i]”导入文件的转移分数到arr [i]?我认为文件Fraction.txt中只有字符,它们不是整数,所以2对象不是同一类型,但编译器仍然有效。 2.当我调试时,这行“inDev&gt;&gt; arr [i]”错过了文件的第一个字符,而函数返回NULL。在这种情况下,“inDev&gt;&gt; arr [i]”错过了“3”。如果我添加其他字符如“2”,它将错过“2”并在3处开始转移。 我不明白这些问题,所以希望你能解释一下,谢谢大家!

0 个答案:

没有答案