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

    Ciclo for con esiti strani

    Sapreste per favore dirmi perchè il ciclo for di questo listato:
    Codice PHP:
    int main()
    {
        
    traghetto_t serv trag_new();
        
    char type;
        
    int inarrivonum;
        
    veicolo_t *temp;
       
        
    printf("quanti veicoli vuoi immettere? ");
        
    scanf("%d", &n);
        
        
    num 0;
          
        for(
    i=0i<ni++){
            
            
    printf("immetti carattere :");
            
    scanf("%c", &type);
        
    printf("\n");
        
    crea_trag(type, ++num, &serv);
           }
         

         
    printf("Stato del traghetto:\n ");
         
    stampa_traghetto(&serv);
         
    temp traghetto_next(&serv);

         while(
    temp != NULL){
              
    printf("Sbarco: %d\n"temp->id);
              
    elimina_veicolo(temp);
              
    printf("Stato del traghetto:\n ");
              
    stampa_traghetto(&serv);
              
    temp traghetto_next(&serv);
          }
     return 
    1;

    una volta compilato salta la scanf al primo passaggio? Cioè al primo passaggio mi compare "immettere carattere:" nel terminale e mi ricompare nuovamente in una seconda riga prima di poter immettere una valore. Scusatemi per il mio C un po' arrugginito.
    Grazie.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Dopo ogni scanf inserisci una riga

    while(!getchar()) ;

    in modo da svuotare il buffer di tastiera.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Il mio problema però è che è proprio la prima scanf che salta.

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    La prima scanf? In che senso "salta"? E che c'enta il ciclo for (come da titolo)?

    Cosa c'e' dentro la funzione

    trag_new();

    che viene chiamata prima e di cui non si sa nulla?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Effettivamente mettendo la pulizia del buffer prima del ciclo for l'immissione torna a essere corretta.
    Grazie.
    P.S. Il listato completo è questo:
    Codice PHP:
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>

    struct veicolo{
            
    int id;
            
    struct veicolo *next;
    };

    typedef struct veicolo veicolo_t;

    struct codapila{
           
    int num;
           
    veicolo_t *first;
    };

    typedef struct codapila coda_tpila_t;

    void elimina_veicolo(veicolo_t *temp){
             
    free(temp);
    }

    coda_t coda_new(){
           
    coda_t result;
           
    result.first NULL;
           
    result.num 0;
           return 
    result;
    }

    pila_t pila_new(){
           
    pila_t result;
           
    result.first NULL;
           
    result.num 0;
           return 
    result;
    }

    void crea_pila(int arrivopila_t *p){
               
    veicolo_t *elem = (veicolo_t *)malloc(sizeofveicolo_t));
               
    elem->id arrivo;
               
    elem->next p->first;
               
    p->first elem;
               
    p->num++;
    }



    void crea_coda(int arrivocoda_t *c){
               
    veicolo_t *elem = (veicolo_t *)malloc(sizeofveicolo_t));  
               
    elem->id arrivo;
               
    elem->next NULL;
          
               if(
    c->num == 0){
                 
    c->first elem;
                 }
               else{
                 
    veicolo_t *temp c->first;
                 while(
    temp->next != NULL){
                     
    temp temp->next;
                      }
                  
    temp->next elem;
               }
               
    c->num++;
    }

    veicolo_t *nuova_coda(coda_t *q){
                if(
    q->num == 0){
                  return (
    0);
                   }
                 
    veicolo_t *temp q->first;
                 
    q->first q->first->next;
                 
    q->num--;
                 return 
    temp;
    }

    veicolo_t *nuova_pila(pila_t *r){
                if(
    r->num == 0){
                  return (
    0);
                   }
                 
    veicolo_t *resultr->first;
                 
    r->first r->first->next;
                 
    r->num--;
                 return 
    result;
    }

    void stampa_coda(coda_t *cq){
             if(
    cq->num == 0){
                
    printf("La coda è vuota ");
                 }
             else{
                
    veicolo_t *temp cq->first;
                
    printf("{ ");
                while(
    temp != NULL){
                       
    printf("%d"temp->id);
                       
    temp temp->next;
                        }
                
    printf(" }");
              }
    }

    void stampa_pila(pila_t *pr){
             if(
    pr->num == 0){
                
    printf("La pila è vuota ");
                 }
             else{
                
    veicolo_t *temp pr->first;
                
    printf("{ ");
                while(
    temp != NULL){
                       
    printf("%d"temp->id);
                       
    temp temp->next;
                        }
                
    printf(" }\n");
              }
    }

    struct traghetto{
             
    coda_t camion;
             
    pila_t automobili;
    };

    typedef struct traghetto traghetto_t;

    traghetto_t trag_new(){
            
    traghetto_t result;
            
    result.camion coda_new();
            
    result.automobili pila_new();
            return 
    result;
    }

    void crea_trag(char typeint idtraghetto_t *t){
                switch(
    tolower(type)){
                  case 
    'c':
                       
    crea_coda(id, &t->camion);
                       break;
                  case 
    'a':
                       
    crea_pila(id, &t->automobili);
                       break;
                 }
    }

    veicolo_ttraghetto_next(traghetto_t *serv){
                if(
    serv->camion.num 0){
                    return (
    nuova_coda(&serv->camion));
                    }
                       
                if(
    serv->automobili.num 0){
                    return (
    nuova_pila(&serv->automobili));
                    }
                 return 
    NULL;
    }

    void stampa_traghetto(traghetto_t *tr){
                 
    printf("-> Camion: "); stampa_coda(&tr->camion);
                 
    printf("\n-> Automobili: "); stampa_pila(&tr->automobili);                  
                 
    printf("\n");
    }

    int main()
    {
        
    traghetto_t serv trag_new();
        
    char type;
        
    int inarrivonum;
        
    veicolo_t *temp;
       
        
    printf("quanti veicoli vuoi immettere? ");
        
    scanf("%d", &n);
        
        
    num 0;
          
        for(
    i=0i<ni++){
            
            
    printf("immetti carattere :");
            while(!
    getchar()) ;
        
    scanf("%c", &type); 
        
    printf("\n");
        
    crea_trag(type, ++num, &serv);
           }
         

         
    printf("Stato del traghetto:\n ");
         
    stampa_traghetto(&serv);
         
    temp traghetto_next(&serv);

         while(
    temp != NULL){
              
    printf("Sbarco: %d\n"temp->id);
              
    elimina_veicolo(temp);
              
    printf("Stato del traghetto:\n ");
              
    stampa_traghetto(&serv);
              
    temp traghetto_next(&serv);
          }
     return 
    1;


  6. #6
    se hai risolto con i suggerimenti dati, cosa ci serve il listato ?
    :master:

  7. #7
    Se posso permettermi un giudizio sullo stile, ti consiglierei
    usare l'indentazione del codice in stile ANSI.

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.