-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