Я все еще новичок в программировании на С ++, и я знаю, что мой код очень неэффективен, поэтому, пожалуйста, расскажите мне, как я пишу эту программу для изучения финала, который подходит скоро.Слияние двух текстовых файлов на один дает другой вывод
Один из текстовых файлов rainfallToDate.txt, и она имеет:
0.01
1.74
0.19
0.65
0.50
0.10
0.00
0.02
0.01
0.06
1.57
7.76
, а другой averageRainfall.txt:
2.99
3.32
2.04
1.06
0.39
0.09
0.00
0.00
0.23
0.78
1.88
2.12
Я должен объединить эти два текстовых файла в текстовый файл с именем rainfall.txt
Вот пример вывода:
Rainfall for Cupertino: A Comparison
Month Average 2015
1 2.99 0.01
2 3.32 1.74
3 2.04 0.19
4 1.06 0.65
5 0.39 0.50
6 0.09 0.10
7 0.00 0.00
8 0.00 0.02
9 0.23 0.01
10 0.78 0.06
11 1.88 1.57
12 2.12 7.76
Как вы можете видеть averageRainfall.txt хранится в строке «среднее», а другой текстовый файл rainfallToDate.txt хранится в 2015.
Ну вот, что я до сих пор, и моя попытка " слияние "двух текстовых файлов.
Моей попытка:
#include <iostream> // for cout
#include <fstream> // for file I/O
#include <cstdlib> // for exit()
using namespace std;
int main()
{
ifstream fin;
ofstream fout;
if (fin.fail())
{
cout << "Input file failed to open.\n";
exit(-1);
}
fout.open("rainfall.txt");
if (fout.fail())
{
cout << "Output file failed to open.\n";
exit(-1);
}
fout << "Rainfall for Cupertino: A Comparison\n" << endl;
fout << "Month\tAverage\t 2015\tDeficit\n" << endl;
for (int i = 1; i <= 12; i++) { // counts the month from 1-12
fout << fixed << i << endl;
}
fin.close();
fout.close();
// averageRainfall under averages
ifstream average;
ofstream oaverage;
average.open("averageRainfall.txt");
if (average.fail())
{
cout << "Input file failed to open.\n";
exit(-1);
}
oaverage.open("rainfall.txt");
if (fout.fail())
{
cout << "Output file failed to open.\n";
exit(-1);
}
oaverage << "\t" << average;
// rainfallToDate under 2015
average.close();
oaverage.close();
ifstream ToDate;
ofstream oToDate;
ToDate.open("rainfallToDate.txt");
if (ToDate.fail())
{
cout << "Input file failed to open.\n";
exit(-1);
}
oToDate.open("rainfall.txt");
if (oToDate.fail())
{
cout << "Output file failed to open.\n";
exit(-1);
}
oToDate << "\t" << "\t" << ToDate;
ToDate.close();
oToDate.close();
return 0;
}
Теперь проблемы, прогоны коды и все не устанавливает какое-либо ошибки, однако, когда я открываю файл, где и код сливает файлы распечатывает
0x29fe64
то, что я считаю, что я сделал неправильно, что я не ставил две TextFiles «средние» и «rainfalltodate» на две отдельные массивы и изложив его оттуда. Исправьте меня, если я ошибаюсь, не очень уверен, если я предположил, что двое поставили оба из них в два отдельных массива.
Вы делаете много чего: вы открываете «rainfall.txt» для записи несколько раз, а режим по умолчанию - «усеченный» режим, который уничтожает существующий контент; у вас есть несколько переменных для одного и того же выходного файла, что бессмысленно, но ваша ошибка связана с тем, что вы «oToDate << ToDate» не копируете содержимое одного файла в другой, он просто печатает адрес объекта «ToDate» в « oToDate». – kfsone