2014-10-31 81 views
-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; 
    } 
+0

我不明白,你的困惑在哪里?你可以发送给'cout'吗?如果你可以发送到'cout',你可以发送到一个文件。 – 2014-10-31 18:49:07

+1

先发送控制台,然后发送到文件。它可能似乎同时发送给两者。 – 2014-10-31 18:49:37

回答

相关问题