Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [C] - Visualizzazione Array con tasti

    Ragazzi, esiste un modo per visualizzare un array alla pressione delle frecce direzionali?

    Mi spiego meglio: Parto dalla prima posizione, ossia Array[0].

    Se premo la freccia a destra mi dovrebbe stampare l'array alla posizione 1;
    Se premo la freccia a sinistra mi dovrebbe stampare sempre la posizione 0.

    Se mi trovo in posizione 1, e premo la freccia a sinistra mi deve stampare la posizone 2;
    mentre se premo la freccia a destra mi deve stampare la posizione 1.

    Ovviamente se sono in ultima posizione e premo la freccia a destra, mi dovrebbe stampare l'ultima posizione senza incrementare....

    Codice PHP:
    #include <stdio.h>
    #include <conio.h> 

    int main() 

      
    int key 0
      
      
    int A[]={0,1,2,3,4};
      
      
    int i=0;
      
      while (
    key != 27 && i>=&& i<=5
      { 
        
    key getch(); 
        if (
    key == 224
        { 
          
    key getch(); 
          switch (
    key
          { 
            case 
    75: if(i<0)
                       
    i=0;
                     
    printf("%d"A[i]); 
                     
    i--;
            break; 
            case 
    77: if(i>5)
                       
    i=0;
                     
    printf("%d"A[i]); 
                     
    i++;
     
          } 
        }
      }

    Qui ci sono dei problemi...ma non riesco a risolvere in altro modo...
    Chi mi aiuta?

  2. #2
    Il problema sta nel voler creare una "specie" di paginazione per la visualizzazione di un Array di Struct complesso...

    Credo di essere stato un pochino un pò più chiaro...almeno credo.. :master:

  3. #3
    Utente di HTML.it L'avatar di rsdpzed
    Registrato dal
    Aug 2001
    Messaggi
    764
    te lo sparo qui al volo perche non posso provare se funge percio prova tu:

    i++ e i-- sono una cosa che NON devi fare se i == 5 o i == 0 mentre nel tuo codice lo fa sempre. Prova a mettere un else (anche se poi devi scrivere due printf() ) e vedi come va.

  4. #4
    Ragazzi ecco, allora il mio problema sta nella gestione degli sforamenti...

    Non riesco a capire come fare ad evitare lo sforamento...

    Vorrei che quando la posizione da stampare è < di zero la stampa dell'array prosegua a ritroso a partire dall'ultimo...
    Mi spiego megio:

    Ho Contatto1, Contatto2, Contatto3 in memoria.

    Voglio stampare tutti i contatti, allora richiamo la void PrintAll che a sua volta sfrutta una Print che riceve l'array e la posizione da stampare.
    Bene! Se clicco sulla freccia direzionale a destra ( ossia in verso positivo ) devo visualizzare uno alla volta, ed alla pressione del tasto freccetta a destra, il contatto alla posizione successiva, e voceversa se premo la freccetta a sinistra devo poter visualizzare il contatto precedente...Credo di essere stato ancora più chiaro...

    Ora il mio programma questo lo fa...ma appena sforo va in segmentation fault...ovviamente

    Chi mi aiuta?...Ecco quello che ho scritto fin ora

    Codice PHP:
    void PrintAll

      
    AGENDA *Agenda/* Agenda da stampare */
      
    int Fine        /* Dimensione dell'array da stampare */
    )
    {

          
          
    int StartEnd;     /* Inizio dell'Array da stampare */
          
          /* 
         
          Invece di avere la stampa sequenziale così:
          for(Start=0; Start<Fine; Start++)
            Print( Agenda , Start );
          
         */
         
          
    char key;
          
          
    Start=0;
          
    End=Fine;
          
                
          do
          {

            
    fflush(stdin);
            
    key getch();
            
            switch( 
    key )
            {
              case 
    75
                       
    /* Se l'inizio è negativo */
                       
    if( Start )
                       {
                         
    Start=0
                         Print( 
    AgendaStart );
                       }
                       else
                       {
                         
    Start--;  
                         Print( 
    AgendaStart );
                       }
            
              case 
    77:
                       
    /* Se l'inizio è maggiore della lunghezza massima */
                       
    if( Start End )
                       {
                         
    Start=End;  
                         Print( 
    AgendaStart );              
                       }
                       else
                       {    
                         
    Start++;
                         Print( 
    AgendaStart );
                       }
              default: Print( 
    Agenda);
            }
          }
          while( 
    key != 27 );
          
          
    system("CLS");
          

    Non so com'è ma non fa nemmeno i controlli... helpppp

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,465
    Ho fatto qualche modifica al volo senza provare ... se funziona dipende da cosa intendi con il parametro End ..,

    In ogni caso, mancano i break nella switch ...

    codice:
    void PrintAll
    ( 
      AGENDA *Agenda, /* Agenda da stampare */
      int Fine        /* Dimensione dell'array da stampare */
    )
    {
          int Start, End;     /* Inizio dell'Array da stampare */
          
          /* 
         
          Invece di avere la stampa sequenziale così:
          for(Start=0; Start<Fine; Start++)
            Print( Agenda , Start );
          
         */
         
          char key;
          
          Start=0;
          End=Fine;
                
          do
          {
    
            fflush(stdin);
            key = getch();
            
            switch( key )
            {
              case 75: 
                       if(Start-- == 0) Start=End-1;
                       break;
              case 77:
                       if(Start++ == End) Start = 0;
                       break;
            }
    
            Print( Agenda, Start );
          }
          while( key != 27 );
          
          system("CLS");
          
    }
    [/QUOTE]

  6. #6
    Originariamente inviato da oregon
    Ho fatto qualche modifica al volo senza provare ... se funziona dipende da cosa intendi con il parametro End ..,

    In ogni caso, mancano i break nella switch ...

    codice:
    void PrintAll
    ( 
      AGENDA *Agenda, /* Agenda da stampare */
      int Fine        /* Dimensione dell'array da stampare */
    )
    {
          int Start, End;     /* Inizio dell'Array da stampare */
          
          /* 
         
          Invece di avere la stampa sequenziale così:
          for(Start=0; Start<Fine; Start++)
            Print( Agenda , Start );
          
         */
         
          char key;
          
          Start=0;
          End=Fine;
                
          do
          {
    
            fflush(stdin);
            key = getch();
            
            switch( key )
            {
              case 75: 
                       if(Start-- == 0) Start=End-1;
                       break;
              case 77:
                       if(Start++ == End-1  ) Start = 0;
                       break;
            }
    
            Print( Agenda, Start );
          }
          while( key != 27 );
          
          system("CLS");
          
    }
    Era End-1 anche nell if... Grazie adesso funziona!!!

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 © 2024 vBulletin Solutions, Inc. All rights reserved.