строка — C ++ программа нуждается в помощи для отладки

#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 menucout << "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;
}

Вот входной файл, который я использую

games.txt

5

SD Mines

21 17

Northern State

10 3

BYU

10 21

Creighton

14 7

Sam Houston State

14 24

Когда я использую 2-й вариант (Печать информации о конкретной игре) на экране вывода,
он просит меня ввести название команды и когда я ввожу название команды.
Например: SD Mines выдаёт мне ошибку, но когда я ввожу имя команды без пробела, например: BYU, оно отлично работает для меня.

0

Решение

cin >> название команды;

Принимает вход только в космос.

Вы можете использовать cin.getline () для взятия разделенных пробелами строк в качестве входных данных.

Небольшая программа, демонстрирующая то же самое:

#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

Другие решения

std :: cin игнорирует пробелы по умолчанию.

Чтобы включить пробелы в ваш ввод, попробуйте:

getline(cin, team_name);

Это будет забрать все символы в строке, пока вы не нажмете ввод. Это доступно в

#include<string>
0

Тебе нужно смывать std::cin буфер после прочтения choice:

#include <limits>
//...

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

Ссылаться на этот вопрос для подробного объяснения.

Также, если вы хотите прочитать строки с пробелами из стандартного ввода, замените это:

cin >> team_name;

с этим:

getline(cin, team_name);

как уже упоминалось в других ответах. Нет необходимости промывать std::cin на этот раз, так как вы уже прочитали полную строку.

Наконец, удалите лишние новые строки из вашего games.txt:

5
SD Mines
21 17
Northern State
...
0
По вопросам рекламы [email protected]