Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicit e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Dov' l'errore?
Forum - C/C++ - Dov' l'errore?

Avatar
XBarboX (Member)
Guru


Messaggi: 945
Iscritto: 31/12/2008

Segnala al moderatore
Postato alle 12:30
Sabato, 30/10/2010
Ciao,
sto facendo un semplice programma: muovere un "#" dentro alla console.

Ecco il sorgente:
Codice sorgente - presumibilmente C++

  1. #include<iostream>
  2. #include<fstream>
  3. using namespace std;
  4.  
  5. const int width=50;
  6. const int height=15;
  7.  
  8. bool mappa[height][width];
  9. int x;
  10. int y;
  11.  
  12. void Azzera(){
  13.      for(int i=1; i<=height; i++){
  14.              for(int j=1; j<=width; j++){
  15.                      mappa[i][j]=false;
  16.                      }
  17.              }
  18.      }
  19.      
  20. void Stampa(){
  21.      for(int i=1; i<=height; i++){
  22.              for(int j=1; j<=width; j++){
  23.                      if(mappa[i][j])cout<<"#";
  24.                      else cout<<"-";
  25.                      }
  26.              cout<<endl;
  27.              }    
  28.      }
  29.  
  30. int main(){
  31.     Azzera();
  32.     x=25;
  33.     y=8;
  34.     mappa[y][x]=true;
  35.     Stampa();  
  36.     system("pause");
  37.     return 0;
  38.     }



Praticamente ancora una bozza mancano le funzioni per gestire lo spostamento del "#". Comunque capita un errore "strano" (magari solo distrazione ma non capisco dov' l'errore)
Dovrebbe stampare alla coordinate x=25 e y=8 il carattere "#" e per tutto il resto della mappa il carattere "-". Eppure a me l'output esce cos:
http://img530.imageshack.us/img530/2231/immagine123.png
Non capisco come mai vengano stampati due "#" senza motivo.

p.s. Se stampo subito dopo la funziona Azzera() tutta la mappa piena di "-", quindi non un errore delle funzioni Azzera o Stampa


The old lie: Dulce et decorum est pro patria mori
PM
Avatar
lumo (Member)
Expert


Messaggi: 412
Iscritto: 18/04/2010

Up
1
Down
V
Segnala al moderatore
Postato alle 14:43
Sabato, 30/10/2010
non ho guardato bene il motivo dell'errore, ma posso dirti che non puoi loopare su un array in quel modo
se hai un array di 20 elementi ad esempio, il primo elemento ha indice 0 mentre l'ultimo 19, tu invece vai da 1 a 20
Ti ho riscritto il codice, IMO adesso pi comprensibile( anche se si potrebbe migliorare ancora )
Codice sorgente - presumibilmente C++

  1. #include<iostream>
  2. #include<fstream>
  3. using namespace std;
  4.  
  5. const int width=50;
  6. const int height=15;
  7.  
  8. void Azzera( bool mappa[height][width] )
  9. {
  10.    for(int i=0; i<height; i++)
  11.    {
  12.       for(int j=0; j<width; j++)
  13.       {
  14.          mappa[i][j]=false;
  15.       }
  16.    }
  17. }
  18.      
  19. void Stampa( bool mappa[height][width] )
  20. {
  21.    for(int i=0; i<height; i++)
  22.    {
  23.       for(int j=0; j<width; j++)
  24.       {
  25.          if(mappa[i][j]==true)
  26.             cout<<"#";
  27.          else
  28.             cout<<"-";
  29.        }
  30.        cout<<endl;
  31.    }    
  32. }
  33.  
  34. int main()
  35. {
  36.     bool mappa[height][width];
  37.    
  38.     Azzera( mappa );
  39.     mappa[8][25]=true;
  40.     Stampa( mappa );  
  41.    
  42.     cin.get();
  43.     return 0;
  44. }


PM
Avatar
Pitagora (Member)
Expert


Messaggi: 367
Iscritto: 12/06/2010

Up
0
Down
V
Segnala al moderatore
Postato alle 14:04
Sabato, 30/10/2010
Codice sorgente - presumibilmente C++

  1. #include<iostream>
  2. #include<fstream>
  3. using namespace std;
  4.  
  5. const int width=50;
  6. const int height=15;
  7.  
  8. bool mappa[height][width];
  9. int x;
  10. int y;
  11.  
  12. void Azzera(){
  13.      for(int i=1; i<=height; i++){
  14.              for(int j=1; j<=width; j++){
  15.                      mappa[i][j]=false;
  16.                      }
  17.              }
  18.      }
  19.      
  20. void Stampa(){
  21.      for(int i=1; i<=height; i++){
  22.              for(int j=1; j<=width; j++){
  23.                      if(mappa[i][j] == false) {
  24.                                                  cout<<"-";
  25.                                                  } else {
  26.                                                   cout<<"#";
  27.                                           }
  28.                                   }
  29.              cout<<endl;
  30.              }    
  31.      }
  32.  
  33. int main(){
  34.     Azzera();
  35.     x=25;
  36.     y=8;
  37.     mappa[y][x]=true;
  38.     Stampa();  
  39.     getchar();
  40.     return 0;
  41.     }


:k: modificando in questo modo il codice funziona non so perch prima non funzionava. Suggerimenti?

Ultima modifica effettuata da Pitagora il 30/10/2010 alle 14:48


Yep, I came back :P
PM
Avatar
carmine (Member)
Pro


Messaggi: 168
Iscritto: 20/04/2010

Up
0
Down
V
Segnala al moderatore
Postato alle 11:13
Domenica, 31/10/2010
per far muovere un carattere sullo schermo puoi usare la gotoxy(int x,int y)
mettendo in un ciclo la coordinata che cresce con un rallentamento e il gioco fatto! se vuoi saperne di pi ti posto la procedura! ciao!!!


Computer Science
PM
Avatar
Pitagora (Member)
Expert


Messaggi: 367
Iscritto: 12/06/2010

Up
0
Down
V
Segnala al moderatore
Postato alle 14:10
Domenica, 31/10/2010
Testo quotato

Postato originariamente da carmine:

per far muovere un carattere sullo schermo puoi usare la gotoxy(int x,int y)
mettendo in un ciclo la coordinata che cresce con un rallentamento e il gioco fatto! se vuoi saperne di pi ti posto la procedura! ciao!!!

Posta, interessa anche a me! Ma la funzione gotoxy solo del C++?


Yep, I came back :P
PM
Avatar
carmine (Member)
Pro


Messaggi: 168
Iscritto: 20/04/2010

Up
0
Down
V
Segnala al moderatore
Postato alle 14:48
Domenica, 31/10/2010
Codice sorgente - presumibilmente C++

  1. #include <iostream>
  2. #include <windows.h>
  3. #include <conio.h>
  4. using namespace std;
  5.  
  6. void gotoxy(int x,int y);  //gotoxy  strutturata gotoxy(colonna,riga)
  7.  
  8. int main()
  9. {
  10.      int col=20, rig=2,tasto=0;  
  11.     //per farlo muovere fai cosi
  12.    
  13.     do
  14.     {
  15.         if(kbhit()) tasto=getch();   //leggo il tasto per uscire con ESC
  16.         gotoxy(col,rig); putch('#');  //cancello
  17.         _sleep(30);     //ritardo la scrittura per effetto camminamento
  18.         gotoxy(col,rig); putch(' ');  //scrivo
  19.        
  20.         col++;  //incremento la riga
  21.         if(col == 75) { col =1; }
  22.  
  23. }while(tasto!=27);    //27 ESC
  24. getch();
  25. return 0;
  26. }
  27.  
  28. void gotoxy(int x,int y)
  29. {
  30.     COORD coor;
  31.     HANDLE hOutput;
  32.     hOutput = GetStdHandle(STD_OUTPUT_HANDLE);
  33.     coor.X = x;
  34.     coor.Y = y;
  35.     SetConsoleCursorPosition(hOutput,coor);
  36. }



anche in c funziona solo che il ritardo delay(millisecondi) inclusa nella libreria dos.h, inoltre il c dovrebbe avere nella conio.h gia inclusa la gotoxy in caso contrario aggiungi la libreria windows.h e la procedura ke ti ho scritto spero di averti aiutato ciaoo

Ultima modifica effettuata da carmine il 31/10/2010 alle 14:51


Computer Science
PM