• Regolamento Macrocategoria DEV
    Prima di aprire un topic nella Macrocategoria DEV, è bene leggerne il suo regolamento. Sei un'azienda o un hosting/provider? Qui sono anche contenute informazioni per collaborare con Sciax2 ed ottenere l'accredito nella nostra community!

Problema risolto Morra cinese (C++)

La mia scrittura era errata, ma il succo era quello...

Con (x==3) or (y==3)

Il ciclo non si ripete

Cavolo scusa, ho sbagliato a scrivere. Volevo scrivere che dovresti scrivere il while così : while( (x<=3) || (y<=3) ).
In questo modo il programma eseguirà le istruzioni finché una delle due variabili non sarà uguale a 3.
 
Cavolo scusa, ho sbagliato a scrivere. Volevo scrivere che dovresti scrivere il while così : while( (x<=3) || (y<=3) ).
In questo modo il programma eseguirà le istruzioni finché una delle due variabili non sarà uguale a 3.

Inserendo <= non faccio altro che aumentare il valore massimo che assume.

Mi spiego meglio

E' come se non ricevesse l'OR logico, in quanto il programma si stoppa quando almeno entrambi hanno raggiunto il valore 3.
 
Inserendo <= non faccio altro che aumentare il valore massimo che assume.

Mi spiego meglio

E' come se non ricevesse l'OR logico, in quanto il programma si stoppa quando almeno entrambi hanno raggiunto il valore 3.

Non è che non riceve l'OR logico, è che dopo le if devi fare un controllo sulle variabili x e y, se una delle due è uguale a 3 allora fermi il ciclo con break e hai risolto il problema.
 
Sì, grazie System. Ho risolto il problema lavorando sulle variabili nel do.

Questo è il nuovo codice:

[CPPS]#include <iostream>
#include <windows.h>
#include <time.h>
#include <conio.h>
using namespace std;
int main() {
SetConsoleTitle("Morra cinese");
int user, computer, x=0, y=0;
char continua;
srand((unsigned)time(NULL));
cout <<"Benvenuto nella Morra Cinese scritta da Samueubellill!\n\n";
do {
cout <<"Sasso = 0\tCarta = 1\t Forbici = 2\n";
cout <<"Attualmente il risultato e': User " <<x <<" - " <<y <<" Computer";
cout <<"\nFai la tua mossa: ";
computer = rand()%3;
cin >> user;
if ( (computer==0) && (user==2) || (computer==1) && (user==0) || (computer==2) && (user==1) ) {
system ("cls");
cout <<"Il computer ha scelto: " <<computer <<". Vince il computer!\n\n";
y++; }
if ( (user==0) && (computer==2) || (user==1) && (computer==0) || (user==2) && (computer==1) ) {
system ("cls");
cout <<"Il computer ha scelto: " <<computer <<". Vince l'utente!\n\n";
x++; }
if (x==3) {
system ("cls");
cout <<"Vince l'utente con un risultato di: User " <<x <<" - " <<y <<" Computer\n";
_getch();
break; }
if (y==3) {
system ("cls");
cout <<"Vince il computer con un risultato di: User " <<x <<" - " <<y <<" Computer\n";
_getch();
break; }
cout <<"Vuoi rigiocare? (S/N): ";
cin >> continua;
cout <<"\n";
if ( (continua=='n') || (continua=='N') ) {
cout <<"Programma concluso con un risultato di: User " <<x <<" - " <<y <<" Computer\n";
_getch();
break; }
if ( (continua!='s') && (continua!='S') && (continua!='n') && (continua!='N') ) {
cout <<"Selezione errata, programma concluso con un errore.";
_getch();
break; }
} while ( (computer==user) || (x<3) && (y<3) || (continua=='s') || (continua=='S') );
}[/CPPS]
 
Ultima modifica:
@Samuelubellill Manca return 0;. Tra l'altro non c'è bisogno di mettere la _getch() dove usi break, puoi metterla al di fuori del ciclo, così eviti di ripeterla. Inoltre va messo prima il break, che fa uscire il programma dal ciclo, dopo la _getch().