![](/img/trans.png)
[英]AccessViolationException when using std::basic_ifstream::get() in C++/CLI, why?
[英]C++ compile error on std::basic_ifstream
我應該編寫一個程序,將兩個文件中的數字合並,並將所有數字寫入第三個文件。 程序從兩個不同的文件中獲取輸入,並將其輸出寫入第三個文件。 每個輸入文件包含從最小到最大的排序順序的int類型的數字列表。 程序運行后,輸出文件將按照從最小到最大的排序順序包含一個較長列表中兩個輸入文件中的所有數字。 我不是100%肯定我的邏輯是正確的。 謝謝您的幫助。
inputFile1:
1 2 3 4 5 6 7 8 9 10
inputFile2:
11 12 13 14 15 16 17 18 19 20
#include <iostream>
#include <conio.h>
#include <fstream>
using namespace std;
int main()
{
int num1, num2;
ifstream inputFile;
ifstream inputFile2;
inputFile.open ("input1.txt");
inputFile2.open("input2.txt");
ofstream outputFile;
outputFile.open("output.txt");
inputFile >> num1;
inputFile2 >> num2;
while(inputFile.eof() && inputFile2.eof())
{
if (num1 < num2)
{
outputFile << num1;
inputFile >> num1;
}
else
{
outputFile << num2;
inputFile2 >> num2;
}
}
inputFile.close();
inputFile2.close();
outputFile.close();
return 0;
}
如果使用標准庫是正常的,那么您可以使用merge
:
int main()
{
ifstream inputFile("input1.txt");
ifstream inputFile2("input2.txt");
ofstream outputFile("output.txt");
typedef istream_iterator<int> IT;
typedef ostream_iterator<int> OT;
std::merge(IT(inputFile), IT(), IT(inputFile2), IT(), OT(outputFile, " "));
outputFile.flush();
}
另請注意,i / ofstream構造函數能夠在初始化期間打開文件。
inputFile2.open();
應該
inputFile2.close();
inputFile2.open();
顯然是inputFile2.close();
的錯誤inputFile2.close();
但我擔心你的邏輯是完全錯誤的。 你還沒有理解這個練習的重點。 您應該同時打開輸入文件和輸出文件,並且不應該使用數組來存儲和排序數字。 如果你這樣做,你將不需要一個數組,根本不需要進行任何排序。 這就是練習的重點。
並重復在這個論壇上已經說過至少一百萬次的內容。 不使用
while (!inputFile.eof())
這是不正確的。 好用
while (inputFile >> num)
這是如何進行合並的非常基本的草圖。 有很多細節需要填寫。
inFile1 >> num1;
inFile2 >> num2;
while (something or other)
{
if (num1 < num2)
{
outFile << num1;
inFile1 >> num1;
}
else
{
outFile << num2;
inFile2 >> num2;
}
}
這里有一個諷刺,'某事或其他'可能涉及使用eof()
。 這是使用inFile.eof()
是正確的事情的一種情況。
BTW你的輸入數據不是很好的方式。 應單獨對每個文件進行排序,但不應將file1中的所有數字都小於file2中的所有數字。 這不是必需的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.