我刚学会了如何在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处开始转移。 我不明白这些问题,所以希望你能解释一下,谢谢大家!