Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - ordinare la stampa come se fosse una tabella
Forum - C/C++ - ordinare la stampa come se fosse una tabella

Avatar
matteog (Normal User)
Pro


Messaggi: 149
Iscritto: 10/04/2009

Segnala al moderatore
Postato alle 12:10
Lunedì, 13/04/2009
ciao
ho fatto un programma che deve stampare a video le varie squadre con i rispettivi risultati delle partite tipo
inter lazio  2

il problema lo riscontro nella stampa,volevo infatti fare in modo che venisse dato in uscita una stampa ben ordinata come se fosse una tabella ma poichè le squadre hanno nomi di diverse lunghezze non sò come fare avete qualche  consiglio inserisco la parte di programma che stampa.


else if(scegli==2)
    {
           cout<<"inserisci mese cercato";
           cin>>mese2;
           cout<<"inserisci anno";
           cin>>anno2;
           rispe='s';
           I=0;
           if(rispe=='S'||rispe=='s')
           {
             while(I < count)
                  {
                    if(strcmp(totocalcio[I].mese,mese2)==0)//permette mediante la strcmp
           //di confrontare carattere per carattere la stringa con quella salvata
                    {
                 if(strcmp(totocalcio[I].anno,anno2)==0)
                  {
                    for(I=0;I<13;I++)
                    {
                      cout<<totocalcio[I].casa<<"     ";
                      cout<<totocalcio[I].trasferta<<"    ";
                     cout<<totocalcio[I].risultato<<"    "<<endl;
                    }
                  }
              }
              I=I+1;
           }
       }
    }
    



grazie  mille a chiunque mi può dare un consiglio

PM Quote
Avatar
®Useless (Normal User)
Rookie


Messaggi: 26
Iscritto: 06/04/2009

Segnala al moderatore
Postato alle 18:25
Lunedì, 13/04/2009
se la differenza tra i nomi delle squadre non è molta,basta che al posto degli spazi tu metta il carattere tab,ma se qualche nome ti eccede una certa lunghezza ci vuole un tab di piu o un tab meno,che se proprio vuoi puoi controllarlo tramite la strlen(nomesquadra); e stampare sempre il numero di tab giusti.

PM Quote
Avatar
munkaka (Member)
Pro


Messaggi: 119
Iscritto: 07/09/2008

Segnala al moderatore
Postato alle 22:22
Martedì, 14/04/2009
credo che ti convenga usare gotoxy, cosi stampi esattamente alle coordinate che vuoi tu senza star li a fare tanti calcoli
Codice sorgente - presumibilmente C/C++

  1. void gotoxy(int x,int y)
  2. {
  3. HANDLE hConsoleOutput;
  4. COORD dwCursorPosition;
  5. cout.flush();
  6. dwCursorPosition.X = x;
  7. dwCursorPosition.Y = y;
  8. hConsoleOutput = GetStdHandle(STD_OUTPUT_HANDLE);
  9. SetConsoleCursorPosition(hConsoleOutput,dwCursorPosition);
  10. }
  11. ...
  12. //esempio
  13. gotoxy(5,6);
  14. cout<<"Hai stampato a coordinate x=5 e y=6";


PM Quote
Avatar
Zonzo (Ex-Member)
Rookie


Messaggi: 34
Iscritto: 21/04/2008

Segnala al moderatore
Postato alle 13:07
Mercoledì, 15/04/2009
Oltre all'utilizzo del gotoxy che è molto efficace, ti suggerisco di creare una semplice funzione che acquisisca in ingresso una stringa, e calcoli automaticamente lo spazio.

Codice sorgente - presumibilmente C/C++

  1. else if(scegli==2)
  2.     {
  3.            cout<<"inserisci mese cercato";
  4.            cin>>mese2;
  5.            cout<<"inserisci anno";
  6.            cin>>anno2;
  7.            rispe='s';
  8.            I=0;
  9.            if(rispe=='S'||rispe=='s')
  10.            {
  11.              while(I < count)
  12.                   {
  13.                     if(strcmp(totocalcio[I].mese,mese2)==0)//permette mediante la strcmp
  14.            //di confrontare carattere per carattere la stringa con quella salvata
  15.                     {
  16.                  if(strcmp(totocalcio[I].anno,anno2)==0)
  17.                   {
  18.                     for(I=0;I<13;I++)
  19.                     {
  20.                    [b]Allinea(totocalcio[I].casa,20);
  21.                       Allinea(totocalcio[I].trasferta,20);
  22.                       Allinea(totocalcio[I].risultato,20);    
  23.                       cout<<endl;[/b]
  24.                     }
  25.                   }
  26.               }
  27.               I=I+1;
  28.            }
  29.        }
  30.     }
  31.      
  32. void Allinea(char* str,int maxcar)
  33. {
  34.      int i,spazio;
  35.      
  36.      spazio = maxcar - strlen(str);
  37.      
  38.      cout<<str;
  39.        
  40.      for(i=0;i<spazio;i++)
  41.      cout<<" ";
  42. }



La funzione Allinea esegue semplicemente una differenza tra lo spazio massimo indicato 'maxcar' e la lunghezza della stringa, e scrive in output tanti spazi quanti il numero ottenuto dalla differenza. Però devi fare attenzione nel dare il giusto valore a 'maxcar' , io ho messo 20 come valore indicativo (credo che sia eccessivo rispetto a ciò che devi fare), ma potresti avere bisogno di più o meno spazio in base alla lunghezza teorica massima del singolo campo. Se non ti è chiara qualcosa dimmelo.

Ultima modifica effettuata da Zonzo il 15/04/2009 alle 13:12
PM Quote