-1
在我的一個項目中,我必須從我的二進制文件中讀取4個獨立的結構,然後將信息發送到屏幕和外部文件。有人可以指導我如何做到這一點?我相信我已經閱讀過這些文件。另外,當我編譯和運行程序時,我給了用戶和選項繼續('Y'的簡單操作)。如果用戶輸入一個無效的字符,我想無效的迴應。請回答'是'和'否'出現,但確實如此,但在輸出之後,系統(「暫停」)將按順序進行並按任意鍵繼續顯示,指示終止該pogram。我很困惑,爲什麼這麼能有人幫助我,也有。如果我選擇是或否會退出程序。如何從二進制文件發送信息到屏幕和外部文件?
謝謝你這麼多
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <string>
#include <iomanip>
#include <cctype>
using namespace std;
const int SIZE = 12;
struct Division
{
char divName [SIZE];
double sales [4];
};
int main()
{
Division Div_E;
Division Div_W;
Division Div_N;
Division Div_S;
void Describe_Program();
void Create_Corporate_File (Division& mainDiv);
void Display_Corporate_Sales (Division& Div_E, Division& Div_W, Division& Div_N, Division& Div_S);
Describe_Program();
string Div;
char ans;
do
{
cout << "Enter the name of the division: \n";
getline (cin,Div);
cin.ignore();
if (Div == "East")
{
Create_Corporate_File (Div_E);
}
else if (Div == "West")
{
Create_Corporate_File (Div_W);
}
else if (Div == "North")
{
Create_Corporate_File (Div_N);
}
else if (Div == "South")
{
Create_Corporate_File (Div_S);
}
else
{
}
cout << "\nWould you like to continue? (Y/N)--\n";
cin>>ans;
ans = toupper (ans);
if (ans != 'Y' && ans != 'N')
{
cout << "Invalid response. Please answer 'Y' for \n";
cout << "Yes and 'N' for no.\n" <<endl;
}
//cin.ignore();
}
while (ans == 'Y');
//Display_Corporate_Sales(Div_E, Div_W, Div_N, Div_S);
system ("PAUSE");
return 0;
}
void Describe_Program()
{
cout << "This program will prompt you to enter the sales amount\n";
cout << "for each quarter of the North, South, West and East Division.\n";
cout << "After you enter the sales amount for each quarter, the program\n";
cout << "will be able to calculate the total quarterly sales for that";
cout << "division";
cout << endl<<endl;
return;
}
void Create_Corporate_File (Division& mainDiv)
{
fstream quarterly_sales;
quarterly_sales.open ("quarterly_sales.dat" , ios::out|ios::binary);
for(int sales = 0; sales < 4; sales++)
{
cout << "Please enter the sales amount for quarter " << sales + 1 <<":\n";
cin >> mainDiv.sales [sales];
}
quarterly_sales.write((char*)(&mainDiv), sizeof(mainDiv));
quarterly_sales.close();
}
void Display_Corporate_Sales (Division& Div_E, Division& Div_W, Division& Div_N, Division& Div_S)
{
fstream quarterly_sales;
quarterly_sales.open ("quarterly_sales.dat" , ios::in|ios::binary);
quarterly_sales.read ((char *)(&Div_E), sizeof(&Div_E));
cout << Div_E.divName ;
cout << Div_E.sales[0];
quarterly_sales.read (reinterpret_cast<char *>(&Div_W), sizeof(&Div_W))
cout << Div_W.divName ;
cout << Div_W.sales[0];
quarterly_sales.read (reinterpret_cast<char *>(&Div_N), sizeof(&Div_N))
cout << Div_N.divName ;
cout << Div_N.sales[0];
quarterly_sales.read (reinterpret_cast<char *>(&Div_S), sizeof(&Div_S))
cout << Div_S.divName ;
cout << Div_S.sales[0];
quarterly_sales.close();
return;
}
我不明白,你的困惑在哪裏?你可以發送給'cout'嗎?如果你可以發送到'cout',你可以發送到一個文件。 – 2014-10-31 18:49:07
先發送控制檯,然後發送到文件。它可能似乎同時發送給兩者。 – 2014-10-31 18:49:37