当我输入q它关闭程序?

时间:2015-11-11 07:06:12

标签: c++ arrays

我认为我做得对,但我不明白为什么当我输入q时程序才会关闭。我对编程一般都很陌生(不仅仅是c ++),并且非常感谢一些帮助。这是我在Array部分的一个项目,我在课堂上落后了。

#include <iostream>
#include <string>

using namespace std;


void    inputData();
void    displayPlayerData();
void    calculateAverageScore();
void    displayBelowAverage();


const int ARRAY_SIZE = 100;


string  m_playerNames[ARRAY_SIZE];
string  m_playerScores[ARRAY_SIZE];
int m_currentPlayer = 0;
int m_totalScore = 0;
int m_totalPlayers = 0;
double  m_averageScore = 0; 

int main()
{

inputData();
displayPlayerData();
calculateAverageScore();
displayBelowAverage();

return 0;
cin.ignore();
cin.get();
}

void inputData()
{
m_currentPlayer = 0;
while (m_currentPlayer < ARRAY_SIZE)    
{

    cout << "Enter Player Name (Q to quit)" << endl;
    cin >> m_playerNames[m_currentPlayer];


    if ((m_playerNames[m_currentPlayer] == "Q") || (m_playerNames[m_currentPlayer] == "q"))
    {
        break;
    }


    cout << "Enter Player Score" << endl;
    cin >> m_playerScores[m_currentPlayer];


    m_currentPlayer++;
}

m_totalPlayers = m_currentPlayer;
}

void displayPlayerData()
    {

m_currentPlayer = 0;

cout << endl << "Players Summary:" << endl;

while (m_currentPlayer < m_totalPlayers)
{
    cout << m_playerNames[m_currentPlayer] << ":  " << m_playerScores[m_currentPlayer] << endl;
    m_currentPlayer++;
}


}


void calculateAverageScore()
  {

m_currentPlayer = 0;

m_totalScore = 0;


while (m_currentPlayer < m_totalPlayers)
    {
    m_totalScore += atoi(m_playerScores[m_currentPlayer].c_str());


    m_currentPlayer++;
}
m_averageScore = m_totalScore / m_totalPlayers;


cout << endl << "Average score is " << m_averageScore << endl;
}


void displayBelowAverage()
{
m_currentPlayer = 0;

cout << endl << "Players not reaching average:" << endl;
while (m_currentPlayer <= m_totalPlayers)
{
    if (atof(m_playerScores[m_currentPlayer].c_str()) < m_averageScore)
    {
        cout << m_playerNames[m_currentPlayer] << ":  " << m_playerScores[m_currentPlayer] << endl;
    }
    m_currentPlayer++;
}
}

2 个答案:

答案 0 :(得分:1)

最有可能的是,你打算用

来暂停程序
cin.ignore();
cin.get();

所以你可以阅读输出。但是你在return声明之后写了这个,那它做了什么?当您从return main时,您的计划结束。将return 0;作为main中的最后一个语句。

答案 1 :(得分:1)

这些行

if ((m_playerNames[m_currentPlayer] == "Q") || (m_playerNames[m_currentPlayer] == "q"))
    {
        break;
    }

表示Qq将退出while中的inputData()循环。发生这种情况时,inputData()结束并控制返回main()。但是程序在请求更多输入之前就已经死了,因为你在main()中有死代码:

displayPlayerData();
calculateAverageScore();
displayBelowAverage();

return 0; // returns 0 and exits the program
cin.ignore(); // never runs
cin.get(); // never runs

尝试撤消main()的最后三行:

cin.ignore();
cin.get();
return 0;