//標頭.h
struct BinaryData { double Data; BinaryData* Next; };
//輸入二進制資料
int InputBinaryData(BinaryData*&);
//交換元素
void Swap(double&, double&);
//對鏈表從小到大進行排序
void ListSortUp(BinaryData*&);
//創建二進制檔案
void CreateAscendingOrderBinaryFile(char*);
//實作.cpp
#include <iostream>
#include <fstream>
#include "標頭.h"
using namespace std;
//輸入二進制資料同時回傳鏈表長度
int InputBinaryData(BinaryData*& HeadOfList)
{
int ListLength = 0;
BinaryData* NewPoint = NULL, * LinkPoint = NULL;
cout << "請輸入資料,結束請按\"Ctrl+Z\"組合鍵:";
NewPoint = new BinaryData;
while (cin >> NewPoint->Data)
{
if (HeadOfList == NULL) { HeadOfList = NewPoint; }
else
{
if (LinkPoint != NULL) { LinkPoint->Next = NewPoint; }
else { cout << "指標出錯啦...\n"; abort(); }
}
LinkPoint = NewPoint;
ListLength = ListLength + 1;
NewPoint = new BinaryData;
}
if (LinkPoint != NULL) { LinkPoint->Next = NULL; }
delete NewPoint;
NewPoint = NULL;
return ListLength;
}
//交換元素
void Swap(double& Data1, double& Data2)
{
double ExchangeData = 0.0;
ExchangeData = Data1;
Data1 = Data2;
Data2 = ExchangeData;
}
//對鏈表進行從小到大排序
void ListSortUp(BinaryData*& HeadOfList)
{
BinaryData* FormerPoint = NULL, * LatterPoint = NULL;
for (FormerPoint = HeadOfList; FormerPoint != NULL && FormerPoint->Next != NULL; FormerPoint = FormerPoint->Next)
{
for (LatterPoint = FormerPoint->Next; LatterPoint != NULL; LatterPoint = LatterPoint->Next)
{
if (FormerPoint->Data > LatterPoint->Data) { Swap(FormerPoint->Data, LatterPoint->Data); }
}
}
}
//創建二進制檔案
void CreateAscendingOrderBinaryFile(char* FileName)
{
int ListLength = 0, Subscript = 0;
BinaryData* HeadOfList = NULL;
fstream BinaryFile;
//輸入檔案名
cout << "請輸入檔案:";
FileName = new char[100];
cin.getline(FileName, 100);
//打開檔案
BinaryFile.open(FileName, ios::out | ios::binary);
if (!BinaryFile) { cerr << "檔案無法創建或打開...\n"; abort(); }
//輸入資料
ListLength = InputBinaryData(HeadOfList);
//將資料進行排列
ListSortUp(HeadOfList);
//將資料寫入二進制檔案
for (; Subscript < ListLength; Subscript = Subscript + 1)
{
BinaryFile.write((char*)&HeadOfList->Data, sizeof(double));
cout << HeadOfList->Data << " ";
HeadOfList = HeadOfList->Next;
}
//關閉檔案
BinaryFile.close();
}
//主函式.cpp
#include <iostream>
#include<fstream>
#include "標頭.h"
using namespace std;
int main()
{
char* File1 = NULL, * File2 = NULL;
CreateAscendingOrderBinaryFile(File1);
CreateAscendingOrderBinaryFile(File2);
delete[]File1;
delete[]File2;
}
【問題】:輸入第一個檔案名和資料都沒有問題,但是到了打開第二個檔案的時候打開失敗,我看百度上說需要"BinaryFile.clear()"這個函式將流狀態清除,但是我加上去還是不行(上面是沒加的),我對檔案操作這個方面不太熟悉,找不出問題,請求各位大佬指點指點,謝謝!!
【錯誤截圖】:

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/284984.html
標籤:C++ 語言
上一篇:遇到一個亂數面試題,目測無最優解
下一篇:【c++基礎類問題】