2016-10-20 1 views
0
#include <iostream> 
#include <fstream> 
#include <iomanip> 
#include <stdlib.h> 
using namespace std; 

struct football_game 

{ 
    string visit_team; 
    int home_score; 
    int visit_score; 
}; 

void printMenu(); 

int main() 
{ 
    int i, totalValues = 0; 
    ifstream inputFile; 
    string temp = ""; 

    inputFile.open("games.txt"); 

    if (!inputFile) 
    { 
     cout << "Error opening Input file!" << endl; 
     exit(101); 
    } 

    inputFile >> totalValues; 
    getline(inputFile, temp); 

    cout << "       *** Football Game Scores *** " << endl << endl; 
    cout << " * Total Number of teams : " << totalValues << endl << endl; 

    football_game* records = new football_game[totalValues]; 

    // while (!inputFile.eof()) 
    // {// == NULL) { 

    for (i = 0; i < totalValues; i++) 
    { 
     getline(inputFile, records[i].visit_team); 
     cout << records[i].visit_team << endl; 
     inputFile >> records[i].home_score >> records[i].visit_score; 
     cout << records[i].home_score << " " << records[i].visit_score << endl; 
     getline(inputFile, temp); 
    } 
    //} 
    cout << endl; 


    int choice = 0; 
    int avg_home_Score = 0; 
    int avg_visit_Score = 0; 

    printMenu(); // prints menu 


    cout << "Please Enter a choice from the Menu : "; 
    cin >> choice; 
    cout << endl << endl; 

    while (true) 
    { 
     switch (choice) 
     { 
      case 1: 
       cout << "    Score Table " << endl; 
       cout << "   ***********************" << endl << endl; 

       cout << "  VISIT_TEAM" 
        << "  " 
        << " HIGH_SCORE" 
        << " " 
        << "VISIT_SCORE " << endl; 
       cout << "  -----------" 
        << "  " 
        << "-----------" 
        << " " 
        << "------------" << endl; 


       for (int i = 0; i < totalValues; i++) 
       { 
        cout << '|' << setw(18) << left << records[i].visit_team << " " << '|' 
         << setw(7) << right << records[i].home_score << "  " << '|' << setw(7) 
         << right << records[i].visit_score << "  " << '|' << endl; 
       } 

       cout << endl << endl << endl; 

       break; 
      case 2: 
      { 
       string team_name; 
       cout << "Enter the Team Name : "; 
       cin >> team_name; 
       for (int i = 0; i < totalValues; i++) 
       { 
        if (records[i].visit_team == team_name) 
        { 

         cout << "  VISIT_TEAM" 
          << "  " 
          << " HIGH_SCORE" 
          << " " 
          << "VISIT_SCORE " << endl; 
         cout << "  -----------" 
          << "  " 
          << "-----------" 
          << " " 
          << "------------" << endl; 
         cout << '|' << setw(18) << left << records[i].visit_team << " " << '|' 
          << setw(7) << right << records[i].home_score << "  " << '|' 
          << setw(7) << right << records[i].visit_score << "  " << '|' 
          << endl; 
        } 
       } 
       cout << endl; 
       break; 
      } 
      case 3: 
      { 
       for (int i = 0; i < totalValues; i++) 
        avg_home_Score += records[i].home_score; 
       cout << "Average home_score: " << (avg_home_Score/totalValues) << endl << endl; 
       break; 
      } 
      case 4: 
      { 
       for (int i = 0; i < totalValues; i++) 
        avg_visit_Score += records[i].visit_score; 
       cout << "Average visit_score: " << (avg_visit_Score/totalValues) << endl << endl; 
       break; 
      } 
      default: 
      { 
       cout << "Please enter valid input !!" << endl; 
       break; 
      } 
     } 
     printMenu(); 
     cin >> choice; 
    } 
    return 0; 
} 

void printMenu() 
{ 
    cout << "      Menu Options     " << endl; 
    cout << "     ================    " << endl; 
    cout << "  1. Print Information of all Games[Table Form] " << endl; 
    cout << "  2. Print Information of a Specific Game  " << endl; 
    cout << "  3. Print Average points scored by the Home Team during season" << endl; 
    cout << "  4. Print Average points scored against the Home Team" << endl << endl << endl; 
} 

Voici le fichier d'entrée j'utiliseprogramme C++ ont besoin d'aide pour déboguer

games.txt

5 

SD Mines 

21 17 

Northern State 

10 3 

BYU 

10 21 

Creighton 

14 7 

Sam Houston State 

14 24 

Quand je suis en utilisant la 2ème option (informations d'impression d'un jeu spécifique) à partir de l'écran de sortie, il me demande d'entrer le nom de l'équipe et quand je saisis le nom de l'équipe. Par exemple: SD Mines ça me donne une erreur, mais quand j'entre le nom de l'équipe sans espace comme: BYU ça marche bien pour moi.

+0

quelle erreur vous donne-t-elle? – xaxxon

+0

il affichera à nouveau le menu – Z123456789

+2

@ Z123456789 - * Programme C++ besoin d'aide pour déboguer * - Ne serait-ce pas le bon moment pour apprendre à utiliser le débogueur fourni avec votre jeu d'outils de compilation? – PaulMcKenzie

Répondre

0

cin >> nom de l'équipe;

Prend l'entrée uniquement jusqu'à l'espace.

Vous pouvez utiliser cin.getline() pour prendre en entrée des chaînes séparées par des espaces.

Un petit programme qui démontre la même:

#include <iostream> 
#include <string> 

int main() 
{ 
    std::string name; 

    std::cout << "Please, enter your full name: "; 
    std::getline (std::cin,name); 
    std::cout << "Name is : , " << name << "!\n"; 

    return 0; 
} 
+0

donc au lieu de cin >> team_name – Z123456789

0

std :: cin ne tient pas compte des espaces blancs par défaut.

Pour inclure des espaces dans votre essai d'entrée:

getline(cin, team_name); 

Cela ramasser tous les caractères d'une ligne jusqu'à ce que vous appuyez sur Entrée. Il est disponible en

#include<string> 
+0

quand je le fais cela ne m'a pas permis d'entrer le nom de l'équipe – Z123456789

+0

La bibliothèque de chaînes doit être incluse dans votre programme. #include user5478656

+0

'#include ' aurait dû être dans le programme d'origine, que 'getline' soit utilisé ou non. – PaulMcKenzie

0

Vous avez besoin to flush the std::cin buffer après avoir lu le choice:

#include <limits> 
//... 

cin >> choice; 
cin.clear(); 
cin.ignore(numeric_limits<streamsize>::max(), '\n'); 

Se reporter à this question pour une explication détaillée.

En outre, si vous voulez lire des chaînes avec des espaces de l'entrée standard, remplacer:

cin >> team_name; 

avec ceci:

getline(cin, team_name); 

comme déjà mentionné dans d'autres réponses. Pas besoin de vider std::cin cette fois, puisque vous avez déjà lu la ligne complète.

Enfin, retirez les nouvelles lignes supplémentaires de votre games.txt:

5 
SD Mines 
21 17 
Northern State 
... 
+0

J'ai ajouté les choses que vous avez mentionnées – Z123456789

+0

mais je peux seulement entrer le nom de l'équipe une fois, quand j'essaye d'entrer la deuxième fois il me donne une erreur – Z123456789

+0

@ Z123456789, il y a deux endroits avec 'cin >> choice'. La deuxième fois est juste le deuxième 'cin >> choice' (à la fin de la boucle), où vous avez probablement oublié de vider' std :: cin'. –