Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18
  1. #1
    Utente di HTML.it L'avatar di bovy
    Registrato dal
    Nov 2006
    Messaggi
    269

    [C++]problema con comando exit()

    ho fatto un programma per il gioco del tris, ma non mi funziona il comando exit e non so il perchè! ho provato a cercare su vari libri e su internet, anche su html.it ma la spiegazione non mi è sembrata molto chiara di come funziona, se qualcuno me la potrebbe spiegare grazie; il problema è: io avevo fatto una switch con le varie opzioni: case1: funzione1();break, case2: funzione2(); break, case3: funzione3(); break; case 4: exit(1);
    così a sempre funzionato poi ho fatto una modifica aggiungendo parti di codice a quello esistente già fatto da me e non va più: inserisco 4 e non esce..come mai? attendo una risposta grazie
    vi scrivo il codice:

    [SIZE=1]
    #include <iostream.h>
    #include <stdlib.h>
    #include <time.h>

    int sceltamenu;
    char tabella[3][3];
    void disegno(void);

    int scelta;
    void gioco();
    void giococonpc();
    int AttaccaPC();
    int Attaccagiocatore();
    int turno;
    void TrovaVincitore ();


    main (void) {


    cout << "(1)-(Gioca contro un altro giocatore)\n";
    cout << "(2)-(Gioca contro il computer)\n";
    cout << "(3)-(Istruzioni)\n";
    cout << "(4)-(Esci)\n\n";
    do cin >> scelta;
    while (scelta < 1 || scelta > 3);
    switch (scelta) {
    case 1:
    gioco (); break;
    case 2:
    giococonpc (); break;
    case 3:
    cout<<"\n\nLo scopo del gioco e' quello di mettere in fila 3 \
    'X' o 3 'O', o in orizzontale, o in verticale o in diagonale:\n\n\
    | | X X | X | X | | X X | | \n\
    ----------- ----------- ----------- -----------\n\
    | X | | | | | X | X | \n\
    ----------- ----------- ----------- -----------\n\
    X | | | | | | X | | X \n\
    \n\n";

    system("Pause");
    system("cls");
    main ();
    case 4:
    exit(1);
    }
    } //chiudi main

    //funzionedel disegno
    void disegno()
    {
    //la griglia

    cout<<"\n\t\t 1 2 3\n"<<endl;
    cout<<"\t\t 1 "<<tabella[0][0]<<" | "<<tabella[0][1]<<" | "<<tabella[0][2]<<endl;
    cout<<"\t\t ---|---|---\n";
    cout<<"\t\t 2 "<<tabella[1][0]<<" | "<<tabella[1][1]<<" | "<<tabella[1][2]<<endl;
    cout<<"\t\t ---|---|---\n";
    cout<<"\t\t 3 "<<tabella[2][0]<<" | "<<tabella[2][1]<<" | "<<tabella[2][2]<<"\n\n\n";
    }

    void giococonpc () { /
    int m,n;
    char risp='s';
    while(risp=='S'||risp=='s')
    {
    for (m=0;m<3;m++)for (n=0;n<3;n++)tabella[m][n]= '\0';
    int riga,colonna, cont=0;

    while ( cont < 10)
    {
    if (cont == 0) disegno();

    do{
    cout<<"Il giocatore 1 e' 'X': scegli dove posizionare la 'X'"<<endl;
    cout<<"Riga:";
    cin>> riga;
    cout<<"Colonna:";
    cin>>colonna;

    }while(riga>3 || riga<1 || colonna>3 || colonna<1 ||('X'==tabella[riga-1][colonna-1]||'O'==tabella[riga-1][colonna-1]));

    tabella[riga-1][colonna-1]='X';
    cont++;
    disegno();

    if (tabella[0][0]=='X' && tabella[0][0]==tabella[1][1] && tabella[1][1]==tabella[2][2])
    {
    cout<<"Hai vinto!"<<endl;break;
    }

    if (tabella[2][0]=='X' && tabella[2][0]==tabella[1][1] && tabella[1][1]==tabella[0][2])
    {
    cout<<"Hai vinto!"<<endl;break;
    }

    if (tabella[0][0]=='X' && tabella[0][0]==tabella[1][0] && tabella[1][0]==tabella[2][0])
    {
    cout<<"Hai vinto!"<<endl;break;
    }

    if (tabella[0][1]=='X' && tabella[0][1]==tabella[1][1] && tabella[1][1]==tabella[2][1])
    {
    cout<<"Hai vinto!"<<endl;break;
    }

    if (tabella[0][2]=='X' && tabella[0][2]==tabella[1][2] && tabella[1][2]==tabella[2][2])
    {
    cout<<"Hai vinto!"<<endl;break;
    }

    if (tabella[0][0]=='X' && tabella[0][0]==tabella[0][1] && tabella[0][1]==tabella[0][2])
    {
    cout<<"Hai vinto!"<<endl;break;
    }

    if (tabella[1][0]=='X' && tabella[1][0]==tabella[1][1] && tabella[1][1]==tabella[1][2])
    {
    cout<<"Hai vinto!"<<endl;break;
    }

    if (tabella[2][0]=='X' && tabella[2][0]==tabella[2][1] && tabella[2][1]==tabella[2][2])
    {
    cout<<"Hai vinto!"<<endl;break;
    }
    if(cont==9)
    {
    cout<<"Nessuno ha vinto!"<<endl;break;
    }

    cout << "\nGiocata del Computer:\n\n";

    srand(time(NULL)); //Inizializza la funzione rand()

    /////ATTACCO/////
    if (tabella[2][0]=='O' && tabella[1][1]=='O' && tabella[0][2]==0) {tabella[0][2]='O'; goto etichetta;}
    if (tabella[2][0]=='O' && tabella[1][1]==0 && tabella[0][2]=='O') {tabella[1][1]='O'; goto etichetta;}
    if (tabella[2][0]==0 && tabella[1][1]=='O' && tabella[0][2]=='O') {tabella[2][0]='O'; goto etichetta;}

    if (tabella[2][2]=='O' && tabella[1][1]=='O' && tabella[0][0]==0) {tabella[0][0]='O'; goto etichetta;}
    if (tabella[2][2]==0 && tabella[1][1]=='O' && tabella[0][0]=='O') {tabella[2][2]='O'; goto etichetta;}
    if (tabella[2][2]=='O' && tabella[1][1]==0 && tabella[0][0]=='O') {tabella[1][1]='O'; goto etichetta;}

    if (tabella[0][2]=='O' && tabella[1][2]=='O' && tabella[2][2]==0) {tabella[2][2]='O'; goto etichetta;}
    if (tabella[0][2]==0 && tabella[1][2]=='O' && tabella[2][2]=='O') {tabella[0][2]='O'; goto etichetta;}
    if (tabella[0][2]=='O' && tabella[1][2]==0 && tabella[2][2]=='O') {tabella[1][2]='O'; goto etichetta;}

    if (tabella[0][0]=='O' && tabella[1][0]=='O' && tabella[2][0]==0) {tabella[2][0]='O'; goto etichetta;}
    if (tabella[0][0]==0 && tabella[1][0]=='O' && tabella[2][0]=='O') {tabella[0][0]='O'; goto etichetta;}
    if (tabella[0][0]=='O' && tabella[1][0]==0 && tabella[2][0]=='O') {tabella[1][0]='O'; goto etichetta;}

    if (tabella[0][1]=='O' && tabella[1][1]=='O' && tabella[2][1]==0) {tabella[2][1]='O'; goto etichetta;}
    if (tabella[0][1]=='O' && tabella[1][1]==0 && tabella[2][1]=='O') {tabella[1][1]='O'; goto etichetta;}
    if (tabella[0][1]==0 && tabella[1][1]=='O' && tabella[2][1]=='O') {tabella[0][1]='O'; goto etichetta;}

    if (tabella[0][0]=='O' && tabella[0][1]=='O' && tabella[0][2]==0) {tabella[0][2]='O'; goto etichetta;}
    if (tabella[0][0]==0 && tabella[0][1]=='O' && tabella[0][2]=='O') {tabella[0][0]='O'; goto etichetta;}
    if (tabella[0][0]=='O' && tabella[0][1]==0 && tabella[0][2]=='O') {tabella[0][1]='O'; goto etichetta;}

    if (tabella[1][0]=='O' && tabella[1][1]=='O' && tabella[1][2]==0) {tabella[1][2]='O'; goto etichetta;}
    if (tabella[1][0]==0 && tabella[1][1]=='O' && tabella[1][2]=='O') {tabella[1][0]='O'; goto etichetta;}
    if (tabella[1][0]=='O' && tabella[1][1]==0 && tabella[1][2]=='O') {tabella[1][1]='O'; goto etichetta;}

    if (tabella[2][0]=='O' && tabella[2][1]=='O' && tabella[2][2]==0) {tabella[2][2]='O'; goto etichetta;}
    if (tabella[2][0]==0 && tabella[2][1]=='O' && tabella[2][2]=='O') {tabella[2][0]='O'; goto etichetta;}
    if (tabella[2][0]=='O' && tabella[2][1]==0 && tabella[2][2]=='O') {tabella[2][1]='O'; goto etichetta;}

    /////DIFESA/////

    if (tabella[2][0]=='X' && tabella[1][1]=='X' && tabella[0][2]==0) {tabella[0][2]='O'; goto etichetta;}
    if (tabella[2][0]=='X' && tabella[1][1]==0 && tabella[0][2]=='X') {tabella[1][1]='O'; goto etichetta;}
    if (tabella[2][0]==0 && tabella[1][1]=='X' && tabella[0][2]=='X') {tabella[2][0]='O'; goto etichetta;}

    if (tabella[2][2]=='X' && tabella[1][1]=='X' && tabella[0][0]==0) {tabella[0][0]='O'; goto etichetta;}
    if (tabella[2][2]==0 && tabella[1][1]=='X' && tabella[0][0]=='X') {tabella[2][2]='O'; goto etichetta;}
    if (tabella[2][2]=='X' && tabella[1][1]==0 && tabella[0][0]=='X') {tabella[1][1]='O'; goto etichetta;}

    if (tabella[0][2]=='X' && tabella[1][2]=='X' && tabella[2][2]==0) {tabella[2][2]='O'; goto etichetta;}
    if (tabella[0][2]==0 && tabella[1][2]=='X' && tabella[2][2]=='X') {tabella[0][2]='O'; goto etichetta;}
    if (tabella[0][2]=='X' && tabella[1][2]==0 && tabella[2][2]=='X') {tabella[1][2]='O'; goto etichetta;}

    if (tabella[0][0]=='X' && tabella[1][0]=='X' && tabella[2][0]==0) {tabella[2][0]='O'; goto etichetta;}
    if (tabella[0][0]==0 && tabella[1][0]=='X' && tabella[2][0]=='X') {tabella[0][0]='O'; goto etichetta;}
    if (tabella[0][0]=='X' && tabella[1][0]==0 && tabella[2][0]=='X') {tabella[1][0]='O'; goto etichetta;}

    if (tabella[0][1]=='X' && tabella[1][1]=='X' && tabella[2][1]==0) {tabella[2][1]='O'; goto etichetta;}
    if (tabella[0][1]=='X' && tabella[1][1]==0 && tabella[2][1]=='X') {tabella[1][1]='O'; goto etichetta;}
    if (tabella[0][1]==0 && tabella[1][1]=='X' && tabella[2][1]=='X') {tabella[0][1]='O'; goto etichetta;}

    if (tabella[0][0]=='X' && tabella[0][1]=='X' && tabella[0][2]==0) {tabella[0][2]='O'; goto etichetta;}
    if (tabella[0][0]==0 && tabella[0][1]=='X' && tabella[0][2]=='X') {tabella[0][0]='O'; goto etichetta;}
    if (tabella[0][0]=='X' && tabella[0][1]==0 && tabella[0][2]=='X') {tabella[0][1]='O'; goto etichetta;}

    if (tabella[1][0]=='X' && tabella[1][1]=='X' && tabella[1][2]==0) {tabella[1][2]='O'; goto etichetta;}
    if (tabella[1][0]==0 && tabella[1][1]=='X' && tabella[1][2]=='X') {tabella[1][0]='O'; goto etichetta;}
    if (tabella[1][0]=='X' && tabella[1][1]==0 && tabella[1][2]=='X') {tabella[1][1]='O'; goto etichetta;}

    if (tabella[2][0]=='X' && tabella[2][1]=='X' && tabella[2][2]==0) {tabella[2][2]='O'; goto etichetta;}
    if (tabella[2][0]==0 && tabella[2][1]=='X' && tabella[2][2]=='X') {tabella[2][0]='O'; goto etichetta;}
    if (tabella[2][0]=='X' && tabella[2][1]==0 && tabella[2][2]=='X') {tabella[2][1]='O'; goto etichetta;}

    /////CASO/////
    do {
    riga = rand() % 4;
    colonna = rand() % 4;
    }
    while(riga>3 || riga<1 || colonna>3 || colonna<1 ||('X'==tabella[riga-1][colonna-1]||'O'==tabella[riga-1][colonna-1]));
    tabella[riga-1][colonna-1]='O';
    goto etichetta;
    etichetta:
    {
    cont++;
    disegno();

    if (tabella[0][0]=='O' && tabella[0][0]==tabella[1][1] && tabella[1][1]==tabella[2][2])
    {
    cout<<"Hai perso!"<<endl;break;
    }

    if (tabella[2][0]=='O' && tabella[2][0]==tabella[1][1] && tabella[1][1]==tabella[0][2])
    {
    cout<<"Hai perso!"<<endl;break;
    }

    if (tabella[0][0]=='O' && tabella[0][0]==tabella[1][0] && tabella[1][0]==tabella[2][0])
    {
    cout<<"Hai perso!"<<endl;break;
    }

    if (tabella[0][1]=='O' && tabella[0][1]==tabella[1][1] && tabella[1][1]==tabella[2][1])
    {
    cout<<"Hai perso!"<<endl;break;
    }

    if (tabella[0][2]=='O' && tabella[0][2]==tabella[1][2] && tabella[1][2]==tabella[2][2])
    {
    cout<<"Hai perso!"<<endl;break;
    }

    if (tabella[0][0]=='O' && tabella[0][0]==tabella[0][1] && tabella[0][1]==tabella[0][2])
    {
    cout<<"Hai perso!"<<endl;break;
    }

    if (tabella[1][0]=='O' && tabella[1][0]==tabella[1][1] && tabella[1][1]==tabella[1][2])
    {
    cout<<"Hai perso!"<<endl;break;
    }

    if (tabella[2][0]=='O' && tabella[2][0]==tabella[2][1] && tabella[2][1]==tabella[2][2])
    {
    cout<<"Hai perso!"<<endl;break;
    }
    };

    }
    cout<<"\nVuoi giocare ancora? (S - N)\n";
    cin>>risp;

    }
    main();
    }


    qui ci sarebbe un altra funzione uguale a quella "gioco con pc" con l'unica differenza è che al posto del pc c'è il giocatore 2, ma è identica x tutto il resto in tutto e per tutto e viene chiusa sempre con

    }
    cout<<"\nVuoi giocare ancora? (S - N)\n";
    cin>>risp;

    }
    main();
    }

  2. #2
    Beh se nel ciclo while scrivi :
    while (scelta < 1 || scelta > 3);
    E' ovvio che la exit() non funziona

    scrivi :
    while (scelta < 1 || scelta > 4);

    OT : Scusa ma che compilatore usi ?
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  3. #3
    Utente di HTML.it L'avatar di bovy
    Registrato dal
    Nov 2006
    Messaggi
    269
    grazie mille lo sbaglio è dovuto al fatto che prima avevo 3 scelte, poi ne ho aggiunta una e mi sono dimenticato di cambiare il valore nel while! grazie ancora

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [C++]problema con comando exit()

    Originariamente inviato da bovy
    ho fatto un programma per il gioco del tris
    Se mi permetti, ti segnalo alcune cose che a mio avviso non vanno bene:
    1) Nel case 3 hai richiamato la funzione main() (e anche alla fine, se non sbaglio). Tale soluzione è pessima, usa un semplice ciclo per rieseguire il corpo del main.
    2) Evita come la peste l'uso del goto.
    3) La lunga serie di if che hai messo è davvero brutta. Bastava aggiungere un po' di "logica" al programma per realizzare un algoritmo migliore.
    4) Il sorgente è scritto molto male come indentazione e disposizione delle istruzioni.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it L'avatar di bovy
    Registrato dal
    Nov 2006
    Messaggi
    269
    lo so che non è un gran che come sorgente, però sono alle prime armi e l'ho buttato giù così senza pensarci troppo! appena faccio un po di esperienza proverò a migliorarlo! il problema del goto è sorto dal momento che sapevo cosa dove fare ma non sapevo come è mi è venuto in mente quello per primo è l'ho usato...come lo avresi risolto il mio problema senza l'uso del go to? per quanto riguarda la lunga serie di if, mi è venuto spontaneo anche quello, tu come lo avresti fatto senza usare gli if? invece per il primo punto che mi hai detto
    (Nel case 3 hai richiamato la funzione main() (e anche alla fine, se non sbaglio). Tale soluzione è pessima, usa un semplice ciclo per rieseguire il corpo del main.
    ) non ho ben capito perchè ti sembra una brutta soluzione?!

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    L'uso del goto e delle if, anche se concordo con andbin, la comprendo almeno finche' non migliorerai il tuo livello/stile di programmazione.

    Ma il fatto di richiamare la main all'interno della stessa main, e' un *grave* errore che dovresti correggere ...

    Se richiami una funzione all'interno della stessa funzione, la stai usando *ricorsivamente*.
    La chiamata di funzione NON e' equivalente al goto in quanto, quando una funzione termina, il controllo ritorna al codice che l'ha richiamata. In questo modo, in pratica, rischi di riempire lo stack ed ottenere un malfunzionamento di cui non ti spieghi il motivo ...

    Il main deve terminare con un return quando termina il programma e deve essere ripetuto in un ciclo se necessario.

  7. #7
    Utente di HTML.it L'avatar di bovy
    Registrato dal
    Nov 2006
    Messaggi
    269
    non ho ben capito l'ultima parte (Il main deve terminare con un return quando termina il programma e deve essere ripetuto in un ciclo se necessario.)...cercherò di studiare e di esercitarmi di più per ottenere risultati migliori e per non fare errori

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    All'interno del main hai due possibilita'. O lo termini con un return, o ripeti il suo codice (in genere un menu ...) ponendolo tale codice all'interno di un ciclo ...

  9. #9
    Utente di HTML.it L'avatar di bovy
    Registrato dal
    Nov 2006
    Messaggi
    269
    main (void) { //apri main

    cout << "(1)-(Gioca contro un altro giocatore)\n";
    cout << "(2)-(Gioca contro il computer)\n";
    cout << "(3)-(Istruzioni)\n";
    cout << "(4)-(Esci)\n\n";
    do cin >> scelta;
    while (scelta < 1 || scelta > 4);
    switch (scelta) {
    case 1:
    gioco (); break;
    case 2:
    giococonpc (); break;
    case 3:
    cout<<"\n\nLo scopo del gioco e' quello di mettere in fila 3 \
    'X' o 3 'O', o in orizzontale, o in verticale o in diagonale:\n\n\
    | | X X | X | X | | X X | | \n\
    ----------- ----------- ----------- -----------\n\
    | X | | | | | X | X | \n\
    ----------- ----------- ----------- -----------\n\
    X | | | | | | X | | X \n\
    \n\n";

    system("Pause");
    system("cls");
    main ();
    case 4:
    exit(1);
    }
    }

    come lo modifico con return?

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    codice:
    int main(void)
    {
    	int scelta=0;
    
    	while(scelta!=4)
    	{
    		cout << "(1)-(Gioca contro un altro giocatore)\n";
    		cout << "(2)-(Gioca contro il computer)\n";
    		cout << "(3)-(Istruzioni)\n";
    		cout << "(4)-(Esci)\n\n";
    		
    		cin >> scelta;
    
    		switch (scelta)
    		{
    			case 1:
    				gioco(); 
    				break;
    			case 2:
    				giococonpc();
    				break;
    			case 3:
    				cout<<"\n\nLo scopo del gioco e' quello di mettere in fila 3 \
    				'X' o 3 'O', o in orizzontale, o in verticale o in diagonale:\n\n\
    				| | X X | X | X | | X X | | \n\
    				----------- ----------- ----------- -----------\n\
    				| X | | | | | X | X | \n\
    				----------- ----------- ----------- -----------\n\
    				X | | | | | | X | | X \n\
    				\n\n";
    
    				system("Pause");
    				system("cls");
    				break;
    			case 4:
    				break;
    			default:
    				cout<<"Scelta errata!\n\n";
    				break;
    		}
    	}
    
    	return 0;
    }

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.