Capisco che era un passaggio inutile avere un cin.get() per il roll, stavo semplicemente provando un po' di funzioni, almeno ho capito che funzionano ha cin.ignore() e cin.clear() dove cancella il dato dal buffer impedendo al programma di proseguire da solo, però appunto pare che usandolo chieda due volte l'input, ho notato che nel tuo codice pur essendo assente nella sezione finale "again" ogni volta richieda comunque ogni volta se riattaccare, questo è perchè è presente
cin.ignore(numeric_limits<streamsize>::max(), '\n');
srand (time(NULL));
while (again == 's' || again == 'S')
cin.ignore() dopo l'again?
Altro dubbio che posso anche dire finale ormai per il thread, nel mio codice non ancora alterato
#include<iostream>
#include<limits>
#include<stdlib.h>
#include<time.h>
using namespace std;
int main()
{
bool flag;
int a, b, dice;
char war;
char again = 's';
while ((cout << "Numero cowboys: ") && !(cin >> a))
{
cout << "\nSi prega di immettere un numero" << endl;
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
}
cin.ignore(numeric_limits<streamsize>::max(), '\n');
while ((cout << "Numero cowgirls: ") && !(cin >> b))
{
cout << "\nSi prega di immettere un numero\n";
cin.clear();
cin.ignore(numeric_limits<streamsize>::max(), '\n');
}
cin.ignore(numeric_limits<streamsize>::max(), '\n');
srand (time(NULL));
while (again == 's' || again == 'S')
{
cout << "Roll the dice \n";
cin.ignore(numeric_limits<streamsize>::max(), '\n');
cin.get();
dice = rand() % 10;
cout << "Dice = " << dice << endl;
if ( dice <= 5 )
{
cout << "\nI cowboys attaccano per primi, le cheerleaders perdono una unità." << endl;
b--;
if (b == 0)
{
cout << "Game over per le cheerleaders." << endl << endl;
cout << "Premi enter per chiudere." << endl;
cin.ignore(numeric_limits<streamsize>::max(), '\n');
cin.get();
return 0;
}
cout << "Numero cowboys " << a << endl << "Numero Cheerleaders " << b << endl;
}
else
{
cout << "\nLe cheerleaders attaccano per prime, i cowboys perdono una unità." << endl;
a--;
if (a == 0)
{
cout << "Game over per i cowboys." << endl << endl;
cout << "Premi enter per chiudere." << endl;
cin.get();
return 0;
}
cout << "Numero cwboys " << a << endl << "Numero cheerleaders " << b << endl;
}
cout << "Vuoi attaccare ancora? (s/n)" << endl;
cin.ignore(numeric_limits<streamsize>::max(), '\n');
cin >> again;
}
}
Seppure la prima volta chieda due volte l'input quando vogliamo fare il roll alla seconda basta fare enter una sola volta, sapresti spiegarmi questo comportamento?