Hello, guys.
I've wrote the following code
#include <iostream>
#include <string.h>
#include <string>
#include <locale>
#include <stdio.h>
#include <stdlib.h>
#include <limits>
#include <vector>
#include <windows.h>
using namespace std;
string Numero_de_Matricula = "";
string Nome = "";
int Numero_de_Materias = 0;
int Numero_de_Creditos = 0;
vector<double> creditos (10);
vector<double> Coeficientes(10);
double Coeficiente_Total = 0;
bool repetir = false;
void ClearScreen();
void Perguntar_Matricula_e_Nome(string,string);
void Perguntar_Materias_e_Creditos();
void Perguntar_Coeficientes(int);
void Calcular_Media(vector<double>&,int);
bool Repetir(bool);
void ClearScreen()
{
HANDLE hStdOut;
CONSOLE_SCREEN_BUFFER_INFO csbi;
DWORD count;
DWORD cellCount;
COORD homeCoords = { 0, 0 };
hStdOut = GetStdHandle( STD_OUTPUT_HANDLE );
if (hStdOut == INVALID_HANDLE_VALUE) return;
/* Get the number of cells in the current buffer */
if (!GetConsoleScreenBufferInfo( hStdOut, &csbi )) return;
cellCount = csbi.dwSize.X *csbi.dwSize.Y;
/* Fill the entire buffer with spaces */
if (!FillConsoleOutputCharacter(
hStdOut,
(TCHAR) ' ',
cellCount,
homeCoords,
&count
)) return;
/* Fill the entire buffer with the current colors and attributes */
if (!FillConsoleOutputAttribute(
hStdOut,
csbi.wAttributes,
cellCount,
homeCoords,
&count
)) return;
/* Move the cursor home */
SetConsoleCursorPosition( hStdOut, homeCoords );
}
void Perguntar_Matricula_e_Nome(string Numero_de_Matricula, string Nome)
{
int Dados_Corretos = 0;
Coeficiente_Total = 0;
cout << "Digite o seu número de matrícula." << endl;
getline(cin,Numero_de_Matricula);
cout << "Digite o seu nome (sem acentos)." << endl;
getline(cin,Nome);
cout << "Seu número de matrícula e nome são:" << endl;
cout << Numero_de_Matricula << "\t " << Nome << endl;
cout << "Seus dados conferem?" << endl;
cout << "1 - Sim" << endl;
cout << "2 - Não" << endl;
cin >> Dados_Corretos;
cin.sync();
if(!cin) // or if(cin.fail())
{
// user didn't input a number
cin.clear(); // reset failbit
cin.ignore(numeric_limits<streamsize>::max(), '\n'); //skip bad input
// next, request user reinput
cout << "\nOpção inválida." << endl << endl;
Perguntar_Matricula_e_Nome(Numero_de_Matricula, Nome);
}
else
{
switch(Dados_Corretos)
{
case 1:
Perguntar_Materias_e_Creditos();
break;
case 2:
cout << "\n\n" << endl;
Perguntar_Materias_e_Creditos();
break;
}
}
}
void Perguntar_Materias_e_Creditos()
{
cout << "Digite o número de matérias" << endl;
cin >> Numero_de_Materias;
cin.sync();
if(!cin) // or if(cin.fail())
{
// user didn't input a number
cin.clear(); // reset failbit
cin.ignore(numeric_limits<streamsize>::max(), '\n'); //skip bad input
// next, request user reinput
cout << "\nDigite um número." << endl << endl;
Perguntar_Materias_e_Creditos();
}
else
{
cout << "Digite o número de créditos (horas por semana):" << endl;
cin >> Numero_de_Creditos;
cin.sync();
if(!cin) // or if(cin.fail())
{
// user didn't input a number
cin.clear(); // reset failbit
cin.ignore(numeric_limits<streamsize>::max(), '\n'); //skip bad input
// next, request user reinput
cout << "\Digite um número." << endl << endl;
Repetir(repetir);
}
else
{
}
Perguntar_Coeficientes(Numero_de_Materias);
}
}
void Perguntar_Coeficientes(int Numero_de_Materias)
{
int i = 0;
for (i = 0; i < Numero_de_Materias; i++)
{
cout << "\n\nDigite o coeficiente da " << i+1 << "ª " << "matéria" << endl;
cin >> Coeficientes[i];
cin.sync();
if(!cin) // or if(cin.fail())
{
// user didn't input a number
cin.clear(); // reset failbit
cin.ignore(numeric_limits<streamsize>::max(), '\n'); //skip bad input
// next, request user reinput
cout << "\nDigite um número." << endl << endl;
Perguntar_Coeficientes(Numero_de_Materias);
}
else
{
cout << "\nDigite o número de créditos dessa matéria" << endl;
cin >> creditos[i];
cin.sync();
if(!cin) // or if(cin.fail())
{
// user didn't input a number
cin.clear(); // reset failbit
cin.ignore(numeric_limits<streamsize>::max(), '\n'); //skip bad input
// next, request user reinput
cout << "\nDigite um número." << endl << endl;
Repetir(repetir);
}
}
}
Calcular_Media( Coeficientes, Numero_de_Creditos);
}
void Calcular_Media (vector<double>& Coeficientes, int Numero_de_Creditos)
{
int j = 0;
for (j = 0; j < Numero_de_Materias; j++)
{
Coeficiente_Total += Coeficientes[j]*creditos[j];
}
cout << "\n\nSeu coeficiente acumulado é:" << endl;
cout << (Coeficiente_Total)/(Numero_de_Creditos) << endl;
Coeficiente_Total = 0;
Coeficientes.clear();
creditos.clear();
Repetir(repetir);
}
bool Repetir (bool repetir)
{
int Sim_ou_Nao = 0;
cout << "\n\nDeseja usar o programa novamente?(1/2)" << endl;
cin >> Sim_ou_Nao;
cin.sync();
if (Sim_ou_Nao == 1)
{
repetir = true;
cin.sync();
ClearScreen();
Perguntar_Matricula_e_Nome(Numero_de_Matricula, Nome);
}
else if ( Sim_ou_Nao == 2)
{
cout << "\nAdeus!" << endl;
}
else if(!cin) // or if(cin.fail())
{
// user didn't input a number
cin.clear(); // reset failbit
cin.ignore(numeric_limits<streamsize>::max(), '\n'); //skip bad input
// next, request user reinput
cout << "\nOpção inválida." << endl << endl;
Repetir(repetir);
}
return 0;
}
int main()
{
setlocale(LC_ALL, "Portuguese");
Perguntar_Matricula_e_Nome(Numero_de_Matricula, Nome);
return 0;
}
and it works just fine. However, I'd like for my vectors to have the size of the user-inputed variable Numero_de_Materias . I tried using vector<double> Coeficientes(Numero_de_Materias)
but it made my for-loop crash.
How should I declare my vector in order for it to work?
Thank you for your time.
Petcheco.