Problema GotoXY, linguaggio c

di il
2 risposte

Problema GotoXY, linguaggio c

Sto creando un programma che simuli il gioco battaglia navale. Il campo è questo:

Il codice per ricevare le coordinate è questo:
do{
            v=1;
            GotoXY(0,14);
            printf("E' il tuo turno!\n\nInserisci la prima coordinata (lettera):          \nInserisci la seconda coordinata (numero):          ");
            GotoXY(55,14);
            printf("Legenda:");
            GotoXY(55,15);
            printf("%c    acqua",c=onda);
            GotoXY(55,16);
            printf("%c    nave",c=nave);
            GotoXY(55,17);
            printf("%c    mancato",c=manc);
            GotoXY(55,18);
            printf("%c    colpito",c=navec);
            GotoXY(55,19);
            printf("%c    affondato",c=navea);
            GotoXY(41,16);
            scanf("%c",&c1);
            if(c1=='A'||c1=='a'){
                l=1;
            }
            else if(c1=='B'||c1=='b'){
                l=2;
            }
            else if(c1=='C'||c1=='c'){
                l=3;
            }
            else if(c1=='D'||c1=='d'){
                l=4;
            }
            else if(c1=='E'||c1=='e'){
                l=5;
            }
            else if(c1=='F'||c1=='f'){
                l=6;
            }
            else if(c1=='G'||c1=='g'){
                l=7;
            }
            else if(c1=='H'||c1=='h'){
                l=8;
            }
            else if(c1=='I'||c1=='i'){
                l=9;
            }
            else if(c1=='J'||c1=='j'){
                l=10;
            }
            else{
                v=0;
            }
            GotoXY(42,17);
            scanf("%i",&n);
            if(n<1||n>10){
                v=0;
            }
            if(v==0){
                GotoXY(0,19);
                printf("Errore!");
            }
        }while(v==0);
Il problema è che nel caso le coordinate inserite non siano corrette, il ciclo riesegue il codice uguale fino a prima del primo Scanf ma poi tutte le volta che gli do in input le nuove coordinate continua a posizionarmi il cursore in 42,17. Come risolvo? Spero di essermi spiegato bene

2 Risposte

  • Re: Problema GotoXY, linguaggio c

    No ... non si è capito il problema ...
  • Re: Problema GotoXY, linguaggio c

    Provo a rispiegarlo. Questo è il codice, serve a ricevere le coordinate in cui il giocatore decide di colpire e a controllare se sono accettabili (le coordinate vanno da A a J e da 1 a 10):
    do{
                /**prima parte**/
                v=1;
                GotoXY(0,14);
                printf("E' il tuo turno!\n\nInserisci la prima coordinata (lettera):          \nInserisci la seconda coordinata (numero):          ");
                GotoXY(55,14);
                printf("Legenda:");
                GotoXY(55,15);
                printf("%c    acqua",c=onda);
                GotoXY(55,16);
                printf("%c    nave",c=nave);
                GotoXY(55,17);
                printf("%c    mancato",c=manc);
                GotoXY(55,18);
                printf("%c    colpito",c=navec);
                GotoXY(55,19);
                printf("%c    affondato",c=navea);
                GotoXY(41,16);
                /**seconda parte**/
                scanf("%c",&c1);
                if(c1=='A'||c1=='a'){
                    l=1;
                }
                else if(c1=='B'||c1=='b'){
                    l=2;
                }
                else if(c1=='C'||c1=='c'){
                    l=3;
                }
                else if(c1=='D'||c1=='d'){
                    l=4;
                }
                else if(c1=='E'||c1=='e'){
                    l=5;
                }
                else if(c1=='F'||c1=='f'){
                    l=6;
                }
                else if(c1=='G'||c1=='g'){
                    l=7;
                }
                else if(c1=='H'||c1=='h'){
                    l=8;
                }
                else if(c1=='I'||c1=='i'){
                    l=9;
                }
                else if(c1=='J'||c1=='j'){
                    l=10;
                }
                else{
                    v=0;
                }
                GotoXY(42,17);
                scanf("%i",&n);
                if(n<1||n>10){
                    v=0;
                }
                if(v==0){
                    GotoXY(0,19);
                    printf("Errore!");
                }
            }while(v==0);
    Quando faccio partire il programma viene eseguita la prima parte del codice ed ottengo questo risultato (il cursore si trova di fianco alla dicitura "prima coordinata"):


    A questo punto inserisco la prima coordinata, quella letterale, e ne inserisco una valida per esempio "E" e do l'invio:


    Il cursore ora si trova vicino alla dicitura "seconda coordinata". Inserisco quindi la coordinata numerica mettendone una non valida( "11"):


    Quando do l'invio compare correttamente il messaggio di ERRORE in basso e così finisce anche la seconda parte di codice:


    A questo punto il ciclo riparte e dovrebbe rieseguire tutte le istruzioni sopraelencate portando quindi il cursore di fianco alla dicitura "prima coordinata" ed invece, come si può notare dall'ultima immagine, il cursore si trova una riga più in basso. E da li tutte le volte che digito invio il cursone torna sempre in quel punto anziché rieseguire il ciclo in modo identico. Non riesco proprio a capire perché.
Devi accedere o registrarti per scrivere nel forum
2 risposte