0

这似乎是一个简单的问题,但我就是想不通是什么让我的控制台快速打开和关闭?我在 main() 函数中包含了 system("PAUSE") 。

程序信息:该程序用于电影院票务系统,显示哪一排的哪些座位可用(如您所见的多维数组)。

有人知道为什么控制台不会保持打开状态吗?我没有在编译器中收到任何错误消息。

#include <iostream>
#include <fstream>
using namespace std;
using std::ifstream;

void Init();
void Display();
void SellTicket();
void ReadPrices();

 char tickets[15][20];
 int revenue = 0;
 int ticketsSold = 0;
 int prices[15];

 int main()
 {
Init();
ReadPrices();
int choice;

    cout << "Enter your choice: " << endl;
    cout << "Press 1 for Display Chart" << endl;
    cout << "Press 2 for sell ticket" << endl;
    cout << "Press 3 for exit" << endl;
    cin >> choice;
    cout << endl;
    switch(choice)
    {
    case 1:
        Display();
        break;
    case 2:
        SellTicket();
        break;
    case 3:
        exit(0);
        break;
    }

system("PAUSE");
return 0;
 }


 void Init()
 {
for (int row = 0; row < 15; row++)
{
    for (int col = 0; col < 20; col++)
    {
        tickets[row][col]='*';
    }
}
 }


 void Display()
 {
cout <<"Seats:\t0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19"<<endl;
for (int row = 0; row < 15; row++)
{
    cout << "Row"<< row << "\t";
    for (int col = 0; col < 20; col++)
    {
        if(col < 10)
            cout << tickets[row][col] << " ";
        else
            cout << tickets[row][col] << "  ";
    }
    cout << endl;
    cout << endl;
}

cout << "Total sold seats are: " << ticketsSold << endl;
cout << "Total revenue is: " << revenue << endl;
cout << endl;

 }

 void SellTicket()
 {
int rowNo,seatNo;
//while(1)
//{
    cout << "Enter Row Number:";
    cin >> rowNo;
    cout << endl;

    cout << "Enter Seat Number:";
    cin >> seatNo;
    cout << endl;

    if (tickets[rowNo][seatNo]=='#')
    {
        cout << "Ticket is not available " << endl;
        cout << endl;
        SellTicket();
    }
    else
    {
        tickets[rowNo][seatNo]='#';
        revenue+=prices[rowNo];
        ticketsSold+=1;

        char c;
        cout << "Would you like to sell another ticket? Press y for yes or      n for no: ";
        cin >> c;
        cout << endl;
        if (c=='y')
        {
            SellTicket();
        }
    }
//}
 }

 void ReadPrices()
 {
int count=0;
ifstream indata; 
int num; 
indata.open("prices.dat"); 
if(!indata) 
{ 
  cerr << "Error: file could not be opened" << endl;
  exit(1);
}
indata >> num;
while ( !indata.eof() ) 
{ 
    prices[count++]=num;
  //cout<< "The next number is " << num << endl;
  indata >> num; 
}
indata.close();
//cout << "End-of-file reached.." << endl;
 }
4

2 回答 2

2

因为在您的 ReadPrices() 函数中,您无法打开 price.dat 文件并简单地退出 (1) 应用程序

  indata.open("prices.dat"); 
  if(!indata) 
  { 
    cerr << "Error: file could not be opened" << endl;
    exit(1);
  }

如果您使用 VisualStudio,运行应用程序,CTL + F5 控制台将保留。

了解如何调试您的应用程序非常重要,单步执行每一行代码,您就可以轻松找到适合您案例的问题。

于 2012-11-18T01:48:02.413 回答
0

我相信 exit() 是由 ReadPrices 调用的。exit() 不调用系统(“暂停”)。

可能的解决方法:

  • std::at_exit()
  • 如果成功,请让您的 ReadPrices 函数返回一个布尔值来标记,而不是调用 exit。
于 2012-11-18T01:48:58.567 回答