2014-10-31 88 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

回答

相關問題