This question already has answers here:
cin.get() is non-blocking
(4 answers)
Closed 5 years ago.
I have got stuck in a strange closing of my small program!
The program calculates the amount of years to reach a saving goal.
But its no problem in the code and I dont see the problem at all with my eyes.
When I run the program it stops strangely after all is done, this also when I have put cin.get(); which should make the program wait for a keypress.
No errors is detected. To the note is also added, that I have tried same code both in VS 2015 and Netbeans with same result. I made a new project in VS and copied the code from netbeans.
Hope for fast answer!
This is my code!
/* Savingscalculation.cpp : Defines the entry point for the console
application.*/
#include "stdafx.h"
#include "iostream"
using namespace std;
int main()
{
// Sätter variabler för programmet.
float inputsaving;
float savingoal;
int years = 0;
float interest;
float savingsum;
float savsum;
/* Sätter ett introduktionsmeddelande, som får programmet att upplevas mer
proffessionellt */
cout << " ------------------------------" << endl;
cout << "| Räkna ut hur många år ditt |" << endl;
cout << "| sparande kommer att ta! |" << endl;
cout << "| Tryck enter för att |" << endl;
cout << "| fortsätta. |" << endl;
cout << " ------------------------------" << endl;
cin.get();
cout << "---------------------------------" << endl;
cout << "Ange ett sparmål: "; // Användaren ombeds att ange ett sparmål
cin >> savingoal; // Det angivna sparmålet sätts till variabeln
cout << "---------------------------------" << endl;
cout << "Ange en årlig insättning: ";
// Användaren ombeds att ange en årlig insättning
cin >> inputsaving;
// Den angivna insättningen sätts till variabeln inputsaving
cout << "---------------------------------" << endl;
cout << "Ange en årlig sparränta: ";
// Användaren ombeds att ange en procentsats
cin >> interest; // Den angivna räntan sätts till variabeln interest
cout << "---------------------------------" << endl;
// Inmatning klar
// uträkning börjar //
// Algoritmen för att räkna ut en insättning + räntan för ett år
savingsum = inputsaving + inputsaving*(interest / 100); cout << endl;
savsum = savingsum;
/* Den uträknade summan kopieras in i variabeln
savsum för vidare uträkning i loopen */
while (savingsum < savingoal)
/* Jämför sparandet per år med sparmålet,
loopen fortsätter tills sparmålet uppnåtts. */
{
years++; // Räknar ut antal år med +1 för varje varv i loopen
savingsum = savingsum + savsum; /* Lägger på 1 års insättning inkl.
räntan för varje nytt år (varv) */
}
// uträkning klar //
// Sparmålet uppnått och resultatet skrivs ut på skärmen.
cout << "------------------------------------" << endl;
cout << "Du har uppnått ditt mål efter " << years << " år" << endl;
// Skriver ut antal år tills sparmålet uppnåtts
cout << "Ditt saldo är då " << savingsum << "kr" << endl;
// Skriver ut saldot som är när sparmålet är nått
cout << "------------------------------------" << endl;
cin.get();
return 0;
}
Regards
Henrik
When you use cin >> interest you record the '\n' you enter when you hit enter, which is then read on the next character for cin.get(). Try calling cin.get() a second time and it should work.
There is some whitespace(' ', '\n' etc.) in your buffer because after cin, the newline character gets into the input buffer. You can remove it by using cin.ignore() after cin >> interest or before cin.get().
Related
I got this code and the problem is that I can only continue the loop forever but i can't exit it. I have been struggling with this for quite some hours and figure out where i do wrong. I think that its mostly about the do while in the end but since I am new to this there might be somewhere else in the code.
#include <iostream>
using namespace std;
int main() {
locale swedish("swedish");
locale::global(swedish);
int saldo = 1000;
int bet;
int vinst;
char val;
int nummer = 0;
char spelaigen;
char spelainteigen;
/*Här "presenteras" programmet med lite cout's som mest välkomnar dig till roulett och ger dig ett saldo*/
cout << "Username: Användare" << endl;
cout << "Password: ********" << endl;
cout << "Logging in: " << endl;
cout << "Searching for a live room: " << endl;
cout << "Initializing mainframe: \n" << endl;
cout << "Välkommen till Save7heCasino" << endl;
cout << "Här spelar du Roulette " << endl;
cout << "Du har " << saldo << " att spela för." << endl;
while (true)
{
cout << "Du får välja mellan 100, 300 eller 500 att spela för." << endl;
cin >> bet;
if (saldo < bet)
{
cout << "Ditt saldo är för lågt." << endl;
break;
}
if (bet == 100)
{
cout << "Du valde insatsen 100:-" << endl;
cout << "Ditt saldo är " << saldo - bet << endl;
}
else if (bet == 300)
{
cout << "Du valde insatsen 300:-" << endl;
cout << "Ditt saldo är " << saldo - bet << endl;
}
else if (bet == 500)
{
cout << "Du valde insatsen 500:-" << endl;
cout << "Ditt saldo är " << saldo - bet << endl;
}
else
{
cout << "Getfucl :)" << endl;
break;
}
srand(time(0));
int vinst = rand() % 36 + 1;
cout << "\n";
cout << "-Vinsttabell: " << endl;
cout << "-Vinst: Färg ger 2x din insats." << endl;
cout << "-Vinst: Nummer ger 10x din insats." << endl;
cout << "\n";
cout << "Vill spela på färg [1] eller nummer [2]: " << endl;
cin >> val;
/*Här väljer jag 1 eller 2 och deklarerar "val" till det nummret
Om jag väljer 1 så kommer if-satsen under att köras och väljer jag 2 så kommer else if-satsen att köras
Om jag väljer 1 så kommer den att deklarera om "val" för den nya input som blir, i detta fall "r" eller "b"
och fortsätta att köras i en ny if-sats som hanterar inmatning 1 */
/*Här kör jag en if-sats för svaret 1 som är färg, identifieraren "val" deklareras då ett nytt värde som
matas in utav användaren som nu i sin tur får välja "r" eller "b". Det finns 2 if-satser för val 1, en för respektive färg, "r" och "b" som avgörs omÄ
random funktionen är delbar eller inte vilket talar om utifall svaret blev rött eller svart.*/
if (val == '1')
{
cout << "Vilken färg vill du spela? [r] för Röd och [b] för Svart " << endl;
cin >> val;
if (val == 'b')
{
if (vinst % 2 == 0)
{
cout << "Resultatet blev Svart: " << vinst << endl;
saldo = saldo + bet * 2 - bet;
cout << "Du vann: " << bet + bet << endl;
cout << "Ditt nya saldo är: " << saldo << endl;
}
else
{
cout << "Du förlorade resultatet blev Rött: " << vinst << endl;
saldo = saldo - bet;
cout << "Ditt nya saldo är: " << saldo << endl;
}
}
if (val == 'r')
{
if (vinst % 2 != 0)
{
cout << "Resultatet blev Rött: " << vinst << endl;
saldo = saldo + bet * 2 - bet;
cout << "Du vann: " << bet + bet << endl;
cout << "Ditt nya saldo är: " << saldo << endl;
}
else
{
cout << "Du förlorade resultatet blev Svart: " << vinst << endl;
cout << "Du förlorade: " << endl;
saldo = saldo - bet;
cout << "Ditt nya saldo är: " << saldo << endl;
}
}
}
/*Här hamnar du om du valde "2" i det första steget efter du valt insats. Även i denna if-sats finns det 2 andra if-satser ,*/
if (val == '2')
{
cout << "Vilket nummer?: ";
cin >> val;
if (vinst == val)
{
cout << "Grattis du vann: " << vinst << endl;
cout << "Du vann: " << bet * 10 << endl;
saldo = saldo + bet * 10 - bet;
cout << "Ditt nya saldo är " << saldo << endl;
}
else if (vinst!=val)
{
saldo = saldo - bet;
cout << "Fel nummer, det rätta nummret var: " << vinst << " - Ditt nya saldo är: " << saldo << endl;
}
}
do
{
cout << "Vill du spela igen?: j/n?: " << endl;
cin >> spelaigen;
} while (spelaigen == 'j' || spelaigen == 'J');
}
return 0;
}
This code seems wrong to me (but apologies I don't read Swedish)
do
{
cout << "Vill du spela igen?: j/n?: " << endl;
cin >> spelaigen;
} while (spelaigen == 'j' || spelaigen == 'J');
I think what you are doing is asking whether the user want to try again, yes or no? If that's right then all you need is an if statement which breaks out of the main loop if the answer is no.
cout << "Vill du spela igen?: j/n?: " << endl;
cin >> spelaigen;
if (spelaigen == 'n' || spelaigen == 'N')
break;
Now that code works but you could also check if the answer is yes or no and ask again if it is neither. That does require an extra loop and maybe that is what you were trying to do in your code. The correct code looks like this
do
{
cout << "Vill du spela igen?: j/n?: " << endl;
cin >> spelaigen;
}
while (spelaigen != 'j' && spelaigen != 'J' && spelaigen != 'n' && spelaigen != 'N');
if (spelaigen == 'n' || spelaigen == 'N')
break;
I have been coding a program to simulate a roulette of a casino, thing is that every time I try to repeat the game after is finished I want the game to keep going and the money to be the same, so if you have lost money you start with that certain money, here is the code (It's in Spanish but I think it's pretty clear):
#include <cstdlib>
#include <ctime>
#include <iostream>
using namespace std;
int num, pri, randum, num2, op, num3 = 10000, col = randum, rep, clear;
int main() {
do {
int num4 = op;
cout << "Escoja la opción de la que apostar.\n";
cout << "1 - Apostar a un número. \n2 - Apostar a un color \n";
cout << "Elija opción: ";
cin >> pri;
cout << " \n";
cout << " \n";
switch (pri) {
case 1: {
srand(time(0));
randum = rand() % 37 + 1; //si poner 37 + 1 te va cojer números hasta el 37 no?
if (num4 != 10000) {
cout << "Su saldo actual es " << num3 << " €\n";
} else {
cout << "Su saldo actual es 10000 €\n";
}
cout << "Ha elegido apostar a un número\n";
cout << "Introduzca el dinero que quiere apostar -->\n";
cin >> num;
cout << "Ahora introduzca el número que desee entre el 0 y 36 -->\n";
cin >> num2;
if (num2 == randum) {
op = num3 + num;
cout << "\n¡Enhorabuena! Has ganado! Ahora tienes " << op << " €\n";
} else {
op = num3 - num;
cout << "\nLo sentimos... Has perdido la apuesta, ahora tienes " << op << " €\n";
cout << "¿Quieres volver a jugar?\n- Sí -> 1\n- No -> 2\n";
cin >> clear;
if (clear == 1) {} else if (clear == 2) {
cout << "Bien, suerte en la próxima tirada.\n\n";
}
}
break;
}
case 2: {
if (num3 == 10000) {
cout << "Su saldo actual es 10000 €\n";
} else {
cout << "Su saldo actual es " << num3 << " €\n";
}
cout << "Ha elegido apostar a un color\n";
cout << "Introduzca el dinero que quiere apostar -->\n";
cin >> num;
srand(time(0));
randum = rand() % 2 + 1;
cout << "Ahora escoja rojo (1) o negro (2) -->\n";
cin >> col;
if (col == randum) {
op = num3 + num;
cout << "\n¡Enhorabuena! Has ganado! Ahora tienes " << op << " €";
} else {
op = num3 - num;
cout << "\nLo sentimos... Has perdido la apuesta, ahora tienes " << op << " €";
}
cout << "¿Quieres volver a jugar?\n- Sí -> 1\n- No -> 2\n";
cin >> clear;
if (clear == 1) {} else if (clear == 2) {
cout << "Bien, suerte en la próxima tirada.\n\n";
}
}
}
} while (clear == 1);
return 0;
}
So, it should be pretty easy to do that.
Initialize the starting amount outside the loop before the betting begins.
At the end of the loop, ask if user wants to bet more.
Would that work for you? Or do you need it to be initialized when you start the code itself? You could use static
I am just changing a few things from your code:
#include <cstdlib>
#include <ctime>
#include <iostream>
using namespace std;
int main()
{
int money = 10000, bet_amount = 0, clear, pri;
cout << "Su saldo inicial es " << money << " €\n";
do
{
cout << "Escoja la opción de la que apostar.\n";
cout << "1 - Apostar a un número. \n2 - Apostar a un color \n";
cout << "Elija opción: ";
cin >> pri;
cout << " \n";
cout << " \n";
cout << "Introduzca el dinero que quiere apostar -->\n";
cin >> bet_amount;
switch (pri)
{
case 1:
{
int number_chosen = -1, randum;
cout << "Ahora introduzca el número que desee entre el 0 y 36 -->\n";
cin >> number_chosen;
srand(time(0));
randum = rand() % 37; // This will give result in the range 0 - 36
if (randum == number_chosen)
{
money += bet_amount;
cout << "\n¡Enhorabuena! Has ganado! Ahora tienes " << money << " €\n";
}
else
{
money -= bet_amount;
cout << "\nLo sentimos... Has perdido la apuesta, ahora tienes " << money << " €\n";
}
break;
}
case 2:
{
int color = 0, randcol;
cout << "Ahora escoja rojo (1) o negro (2) -->\n";
cin >> color;
srand(time(0));
randcol = rand() % 2 + 1;
if (randcol == color)
{
money += bet_amount;
cout << "\n¡Enhorabuena! Has ganado! Ahora tienes " << money << " €\n";
}
else
{
money -= bet_amount;
cout << "\nLo sentimos... Has perdido la apuesta, ahora tienes " << money << " €\n";
}
break;
}
default:
break;
}
cout << "¿Quieres volver a jugar?\n- Sí -> 1\n- No -> 2\n";
cin >> clear;
if (clear == 2)
{
cout << "Bien, suerte en la próxima tirada.\n\n";
}
} while (clear == 1);
cout << "Tu saldo final es " << money << " €\n";
return 0;
}
It took me a while to figure out the code because I had to use google translate
I suggest you store the money into a file Like this :
#include <fstream>
ofstream myfile ("money.txt");
if (myfile.is_open())
{
myfile << "put the money in the bag here";
myfile.close();
}
else cout << "Unable to open file";
And whenever you want to read the value
Use this:
string line;
ifstream myfile ("money.txt");
if (myfile.is_open())
{
getline (myfile,line);
cout << line << '\n';
myfile.close();
}
else cout << "Unable to open file";
This is my funcoes.h where i keep my fuctions, my problem is at this line cout << "Digite o tipo de EPI a ser cadastrado: \n"; My program just skips the next getline(); and i cannot read user input. looks like this
The next getline() is working fine, so i've no ideia where the problem is.
#ifndef FUNCOES_H_INCLUDED
#define FUNCOES_H_INCLUDED
#include "Estruturas.h"
#include <string.h>
using namespace std;
void cadastroInsumos(tVacina vacinas[], tMedicamento medicamento[], tEPI EPIs[])
{
int casee, i;
cout << "Qual insumo voce deseja cadastrar?\n" << endl;
cout << "[1] - Vacina" << endl;
cout << "[2] - Medicamento" << endl;
cout << "[3] - EPI" << endl;
cout << "-----------------------------------------" << endl;
cin >> casee;
system("CLS");
if (casee == 3)
{
tEPI epi;
cout << "Digite o tipo de EPI a ser cadastrado: \n";
getline(cin, epi.tipo);
cout << "Digite o nome do EPI a ser cadastrado: \n";
getline(cin, epi.dadosEPI.nome);
cout << "Digite o valor unitario: \n";
cin >> epi.dadosEPI.valorUnitario;
cout << "Digite a quantidade de itens: \n";
cin >> epi.dadosEPI.qItens;
cout << "Digite a data de vencimento: \n";
cin >> epi.dadosEPI.dataVencimento.dia;
cin >> epi.dadosEPI.dataVencimento.mes;
cin >> epi.dadosEPI.dataVencimento.ano;
cout << "Digite o nome do fabricante: \n";
cin >> epi.dadosEPI.nomeFabricante;
cout << "Digite informacoes detalhadas sobre o EPIs: \n";
cin >> epi.detalhesEPI;
EPIs[1] = epi;
system("CLS");
}
}
/*void criarVacinas(tVacina vacinas[])
{
}
void criarMedicamentos(tMedicamento medicamento[])
{
}
void criarEPIs(tEPI EPIs[])
{
}*/
#endif // FUNCOES_H_INCLUDED
My main looks like this
#include <iostream>
#include <string>
#include "Estruturas.h"
#include "Funcoes.h"
using namespace std;
int main()
{
int casee;
tVacina vacinas[10];
tMedicamento medicamentos[10];
tEPI EPIs[10];
cout << "------UFPB 2021 - ENGENHARIA DE COMPUTACAO - PROJETO POO------" << endl;
cout << "Grupo: Leonardo Chianca, Savio Nazario e Yuri Fernandes\n" << endl;
cout << "------Bem-vindo ao Sistema de Gerenciamento de insumos------\n" << endl;
while(true)
{
cout << "Digite o numero correspondente a operacao que deseja executar: \n" << endl;
cout << "[0] - Fechar Sistema" << endl;
cout << "[1] - Cadastro de Insumos no estoque do MS" << endl; //vacinas, medicamentos e EPIs
cout << "[2] - Consulta de Insumos disponiveis no estoque do MS" << endl;
cout << "[3] - Consulta da descricao de Insumos disponiveis no estoque do MS" << endl; //Informacoes sobre seus atributos
cout << "[4] - Consulta de Insumos disponiveis no estoque do MS por tipo" << endl; //vacina, medicamentos e EPIs
cout << "[5] - Consulta de Insumos distribuidos para os estados" << endl;
cout << "[6] - Consulta da descricao de Insumos disponiveis nos Estados" << endl; //Informacoes sobre seus atributos
cout << "[7] - Consulta de Insumos disponiveis no estoque dos Estados por tipo" << endl; //Vacinas, medicamentos e EPIs
cout << "[8] - Consulta de Insumos disponiveis no estoque por Estado" << endl; //Estado passado como paramentro
cout << "[9] - Distribuir Insumos entre Estados\n" << endl; //O parametro deve ser o estado + o tipo de insumo que saira do estoque do MS
cout << "---------------------------------------------------------------------------" << endl;
cin >> casee;
system("CLS");
switch(casee)
{
default: return 0;
break;
case 1: cadastroInsumos(vacinas, medicamentos, EPIs);
break;
case 2:
break;
case 3:
break;
case 4:
break;
case 5:
break;
case 6:
break;
case 7:
break;
case 8:
break;
case 9:
break;
}
}
}
It is caused because of this line:
cin >> casee;
This line reads a number into the variable "casee".
However, the newline '\n' entered after the number is not read.
Then, the pending newline is read by the following getline:
getline(cin, epi.tipo);
Then, epi.tipo is assigned a "\n" value.
Newbie in programming.
Want to add a message that say something like wrong input ..
but not sure how to do it.
The program works but want to add error message so the user can't press wrong button
have tried like an if statement inside the while loop like
if (input != "A" && input != "a" && input != "S" && input != "s")
cout << "not valid options << endl;
and please tell if I can make the code better in any way , always good to know if i am doing things in a good way or not.
here is my code to the program
#include <cmath>
#include "stdafx.h"
#include <iostream>
#include <cstdlib>
#include <time.h>
#include <string>
using namespace std;
int main()
{
locale swedish("swedish"); // tar in svenska tecken
locale::global(swedish);
int marker = 100; // marker som man börjar med
int num1, num2, num3; // numren som ska slumpas senare
string input;
cout << "Välkommen till mitt slumptalspel!!"<< endl ;
cout << " Detta spel går ut på att man ska få mer än 450" << endl;
cout << "så får man mer marker och får man mindre än 450 så förlorar man marker" << endl;
cout << " får man mer än 200 marker så vinner man !!" << endl;
cout << " och tar markerna slut så har man förlorat" << endl;
while (input != "A" && input != "a")
{
cout << "Du har " << marker << " marker. spela tryck [S] avsluta tryck [A]"<< endl;
cin >>input; // här bestämmer sig spelaren för om han vill spela eller inte med s eller a
if (input == "S" || input == "s")
{
num1 = rand() % 350 + 1; // här slumpas talen ut
num2 = rand() % 350 + 1;
num3 = rand() % 350 + 1;
cout << "[" << num1 << "][" << num2 << "][" << num3 << "]" << endl; // här skrivs num1 till 3 ut vad dom får för värden
srand(time(0));
if (num1 + num2 + num3 >= 450) // om väret tillsammans blir mer än 450
{
marker += 12; // lägg till 12 marker
cout << "du vann 12 marker =) " << endl;
}
else
{
cout << " Du förlorade 50 marker" << endl; // annars ta bort 50 marker
marker -= 50;
}
if (marker <= 0) // om markerna är 0 eller mindre
{ // så är spelet slut
cout << " Spelet är slut du har inga marker kvar" << endl;
return 0;
}
if (marker >= 200 )
{
cout << " du vann GRATTIS!!" << endl; // om man får 200 eller mer marker så vinner man och spelet avslutas sedan
return 0;
}
}
}
cout << "Spelet avslutas " << endl; // om man avbryter med A så avslutas det så här med detta meddelande
return 0;
}
Did try an switch as someone here said to me, then the problem is that it never stops, when the marker is 0 or less or 200 it should stop but it doesent,
I did the code like this
#include "stdafx.h"
#include <cmath>
#include <iostream>
#include <cstdlib>
#include <time.h>
#include <string>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
locale swedish("swedish"); // tar in svenska tecken
locale::global(swedish);
int marker = 100; // marker som man börjar med
int num1, num2, num3; // numren som ska slumpas senare
char input;
int menu();
cout << "Välkommen till mitt slumptalspel!!" << endl;
cout << " Detta spel går ut på att man ska få mer än 450" << endl;
cout << "så får man mer marker och får man mindre än 450 så förlorar man marker" << endl;
cout << " får man mer än 200 marker så vinner man !!" << endl;
cout << " och tar markerna slut så har man förlorat" << endl;
do
{
cout << "Du har " << marker << " marker. spela tryck [S] avsluta tryck [A]" << endl;
cin >> input;
switch (input)
{
case 'A':
cout << " spelet avslutas" << endl;
return 0;
case 'S':
num1 = rand() % 350 + 1; // här slumpas talen ut
num2 = rand() % 350 + 1;
num3 = rand() % 350 + 1;
cout << "[" << num1 << "][" << num2 << "][" << num3 << "]" << endl; // här skrivs num1 till 3 ut vad dom får för värden
srand(time(0));
if (num1 + num2 + num3 >= 450) // om väret tillsammans blir mer än 450
{
marker += 12; // lägg till 12 marker
cout << "du vann 12 marker =) " << endl;
break;
}
else
{
cout << " Du förlorade 50 marker" << endl; // annars ta bort 50 marker
marker -= 50;
break;
}
if (marker <= 0) // om markerna är 0 eller mindre
{ // så är spelet slut
cout << " Spelet är slut du har inga marker kvar" << endl;
return 0;
}
if (marker >= 200)
{
cout << " du vann GRATTIS!!" << endl; // om man får 200 eller mer marker så vinner man och spelet avslutas sedan
return 0;
}
default:
cout << " nope inget giltigt val " << endl; // Om man väljer ett alternativ som inte finns så kommer detta meddelande fram
break;
}
} while (input != 'q' )
;
}
You can use switch statements to make it better, and in the default case, you can print your desired output:
switch(input)
{
case 'A':
//Do something and break.
case 'a':
//Do something and break.
.
.
.
default:
cout<<"not valid options" << endl;
}
I fixed it ,
#include "stdafx.h"
#include <cmath>
#include <iostream>
#include <cstdlib>
#include <time.h>
#include <string>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
locale swedish("swedish"); // tar in svenska tecken
locale::global(swedish);
int marker = 100; // marker som man börjar med
int num1, num2, num3; // numren som ska slumpas senare
char input;
cout << "Välkommen till mitt slumptalspel!!" << endl;
cout << " Detta spel går ut på att man ska få mer än 450" << endl;
cout << "så får man mer marker och får man mindre än 450 så förlorar man marker" << endl;
cout << " får man mer än 200 marker så vinner man !!" << endl;
cout << " och tar markerna slut så har man förlorat" << endl;
cout << " tre tal kommer att slumpas och varje tal kan vara mellan 1 och 350" << endl;
cout << " LYCKA TILL!!!" << endl;
do
{
if (marker <= 0) // om markerna är 0 eller mindre
{ // så är spelet slut
cout << " Spelet är slut du har inga marker kvar" << endl;
return 0;
}
if (marker >= 200)
{
cout << " du vann GRATTIS!!" << endl; // om man får 200 eller mer marker så vinner man och spelet avslutas sedan
return 0;
}
cout << "Du har " << marker << " marker. spela tryck [S] avsluta tryck [A]" << endl;
cin >> input;
switch (input)
{
case 'A':
cout << " spelet avslutas" << endl;
return 0;
case 'a':
cout << " spelet avslutas" << endl;
return 0;
case 'S':
num1 = rand() % 350 + 1; // här slumpas talen ut
num2 = rand() % 350 + 1;
num3 = rand() % 350 + 1;
cout << "[" << num1 << "][" << num2 << "][" << num3 << "]" << endl; // här skrivs num1 till 3 ut vad dom får för värden
srand(time(0));
if (num1 + num2 + num3 >= 450) // om väret tillsammans blir mer än 450
{
marker += 12; // lägg till 12 marker
cout << "du vann 12 marker =) " << endl;
break;
}
else
{
cout << " Du förlorade 50 marker" << endl; // annars ta bort 50 marker
marker -= 50;
break;
}
case 's':
num1 = rand() % 350 + 1; // här slumpas talen ut
num2 = rand() % 350 + 1;
num3 = rand() % 350 + 1;
cout << "[" << num1 << "][" << num2 << "][" << num3 << "]" << endl; // här skrivs num1 till 3 ut vad dom får för värden
srand(time(0));
if (num1 + num2 + num3 >= 450) // om väret tillsammans blir mer än 450
{
marker += 12; // lägg till 12 marker
cout << "du vann 12 marker =) " << endl;
break;
}
else
{
cout << " Du förlorade 50 marker" << endl; // annars ta bort 50 marker
marker -= 50;
break;
}
default:
cout << " nope inget giltigt val försök igen " << endl; // Om man väljer ett alternativ som inte finns så kommer detta meddelande fram
break;
}
} while (input != 'QK')
;
}
I'm having some trouble with my moviedatabase, my searchfunction isn't working.
I'm a total beginner and have gotten the searchfunction of the net, but it wont search.
Here's my code.
#include <iostream>
#include <vector>
#include <sstream> // För att kunna använda sig av getline()
#include <string> // För att kunna använda sig av getline()
#include <algorithm>
using namespace std;
class Film
{
public:
string Titel;
string Typ;
// FUNKTION: Skriver ut filmens titel och typ
void skrivUtFilm()
{
cout << endl;
cout << "Titel: " << Titel << endl; // Skriver ut filmens titel
cout << "Typ: " << Typ << endl; // Skriver ut filmens typ
}
};
int main()
{
vector<Film> Databas; // Skapa en vektor av typen Film
Film nyFilm; // För att kunna skapa en film behöver vi kunna spara den
while (true)
{
// Skriver ut menyn:
cout << " === FILMDATABAS === " << endl;
cout << "1: Registera en ny film" << endl;
cout << "2: S\x94k efter en film" << endl;
cout << "3: Skriv ut filmlistan" << endl;
cout << "0: Avsluta" << endl;
cout << "Ange ditt val: ";
char menySelection; // Användarens val
cin >> menySelection;
if (menySelection == '1') // Registerar nya filmer
{
cin.get();
cout << "\n\n1: Registrera en ny film\n";
cout << "Vad \x84r filmens Titel: ";
getline(cin, nyFilm.Titel);
cout << "\x8er filmen p\x86 DVD eller BluRay? ";
getline(cin, nyFilm.Typ);
cout << endl;
// Vi lägger vårt filmobjekt i vektorn
Databas.push_back( nyFilm );
}
else if (menySelection == '2') // Söker efter filmer som användaren har lagt till
{
cin.get();
cout << "\nS\x94k efter filmer i databasen: \n\n";
string objekt;
getline(cin, objekt);
cout << endl;
vector<Film>::iterator it;
it = find_if(Databas.begin(), Databas.end(),[&] ( const Film &f )
{
return ( f.Titel == objekt);
});
}
else if (menySelection == '3') // Skrivet ut alla filmer i Filmarkivet
{
cout << "\n=========\n";
cout << "Filmlistan\n";
for(int i=0; i<Databas.size(); i++)
{
Databas[i].skrivUtFilm(); // Skriver ut dem med hjälp av skrivUtFilm();
}
cout << "\n=========\n";
cout << "\n\nTryck p\x86 ENTER f\x94r att \x86terv\x84nda till menyn.\n\n";
cin.get();
}
else if (menySelection == '0') // Avslutar programmet
{
break;
}
else
{
cout << "Ogiltigt val!\n." << endl;
}
}
cin.get();
return 0;
}
When you find the film, you don't do anything with it.
After the search function, you should add something like:
if (it != Databas.end()) {
it->skrivUtFilm();
} else {
cout << "No film found" << endl;
}
to print info about the film that you have found, or a message that no film was found.