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

    [c++] Problema Salto del gets()

    Buona sera a tutti,
    Per l'università sto facendo un programma che gestisca i voli e gli aeroporti di una qualsiasi compagnia aerea. Ciò prevede inserimento, ricerca, modifica, cancellazione(logica/fisica) e ripristino di tali strutture. Siccome ho appena imparato ad usare c++, ho provato ogni singolo pezzo di programma in una scheda a parte e ,una volta che tutti funzionavano, ho riassemblato il tutto. Con il compile il DEV C++ non da problemi, e con i menù arrivo fino all'operazione voluta.
    Solo che ogni volta che richiedo un parametro all'inizio di ogni procedura, la salta. Non so il perché. La logica è giusta (visto che ho fatto 3 anni fa un programma simile in Pascal e funzionava benissimo), quindi presumo sia un problema derivato da una mia lacuna in c++.
    Ora posto una parte di codice (il programma finito è di circa 1500 righe);

    Codice PHP:
    #include <iostream>
    #include <windows.h>
    #include <stdlib.h>
    #include <fstream>
    using namespace std;

    //STRUTTURE DI DATI

    struct ora1 
    int ora;
      
    int minuti;

    };

    struct volo1
    char id_volo[6];
      
    ora1 ora_partenza;
      
    ora1 ora_arrivo;
      
    char cod_partenza[6];
      
    char cod_arrivo[6] ;
      
    int canc;
    };

    struct aero1
    {char id_aeroporto[5];
     
    char nome[21];
     
    char citta[21];
     
    char nazione[21];
     
    int fusorario;
     
    int canc;
    };

    aero1 aeroporto;
    volo1 volo;

    void gotoxyint xint y ){
    COORD coord;
    coord.x;
    coord.y;
    SetConsoleCursorPosition(GetStdHandleSTD_OUTPUT_HANDLE ), coord);
    }

    //DICHIARAZIONE DI TUTTE LE FUNZIONI E DELLE PROCEDURE

    void SMISTAMENTO2(int scelta);
    void VIS_AEROPORTO();
    void VIS_VOLO();
    void MASCHERA_VOLO();
    void INSERIMENTO_VOLO();
    void INSERIMENTO_AEROPORTO();
    void RIC_CITTA (char citta[21],int &a);
    void RICERCA_AEROPORTO(int x);
    void RICERCA_VOLO(int x);
    void MODIFICA_AEROPORTO();
    void MODIFICA_VOLO();
    void CANCELLAZIONE_LOGICA_AEROPORTO();
    void CANCELLAZIONE_LOGICA_VOLO();
    void CANCELLAZIONE_FISICA_AEROPORTO();
    void CANCELLAZIONE_FISICA_VOLO();
    void RIPRISTINO_AEROPORTO();
    void RIPRISTINO_VOLO();
    void LOGIN();
    void MENU_RICERCA_AEROPORTO();
    void MENU_RICERCA_VOLO();
    int  MENU_CANCELLAZIONE ();
    int  MENU_VOLO_AEROPORTO();
    int  MENU_ADMIN();
    int  MENU1();
    void CANCELLAZIONE_AEROPORTO ();
    void CANCELLAZIONE_VOLO ();
    void SMISTAMENTO2(int scelta);
    void SMISTAMENTO1(int scelta);
    void INTESTAZIONE();
    void SALUTI();

    //PROGRAMMA

    //PARTE AMMINISTRAZIONE

    //Maschere per il programma
    void VIS_AEROPORTO()
    {
    system("cls");
     
    gotoxy(32,2);
     
    cout<<"INSERIMENTO AEROPORTO";
     
    gotoxy(5,5);
     
    cout<<"Codice:_____";
     
    gotoxy(34,5);
     
    cout<<"Nome:____________________";
     
    gotoxy(5,7);
     
    cout<<"Citta':____________________";
     
    gotoxy(34,7);
     
    cout<<"Nazione:____________________";
     
    gotoxy(5,9);
     
    cout<<"Fusorario:___"
    }

    void VIS_VOLO() //maschera per l'inserimento del volo
    {system("cls");
     
    gotoxy(32,2);
     
    cout<<"INSERIMENTO VOLO";
     
    gotoxy(5,5);
     
    cout<<"Codice:_____";
     
    gotoxy(20,5);
     
    cout<<"Ora Partenza:__:__";
     
    gotoxy(41,5);
     
    cout<<"Ora Arrivo:__:__";
     
    gotoxy(5,7);
     
    cout<<"Citta' Partenza:____________________";
     
    gotoxy(43,7);
     
    cout<<"Citta' Arrivo:____________________";
     
    gotoxy(5,20);
     
    cout<<"Codice Aeroporto Partenza:_____";
     
    gotoxy(43,20);
     
    cout<<"Codice Aeroporto Arrivo:_____";
    }

    void MASCHERA_VOLO()  //maschera per la ricerca, la modifica, la cancellazione e il ripristino del Volo
    {system("cls");
     
    gotoxy(5,5);
     
    cout<<"Codice:_____";
     
    gotoxy(20,5);
     
    cout<<"Ora Partenza:__:__";
     
    gotoxy(41,5);
     
    cout<<"Ora Arrivo:__:__";
     
    gotoxy(5,7);
     
    cout<<"Codice Aeroporto Partenza:_____";
     
    gotoxy(43,7);
     
    cout<<"Codice Aeroporto Arrivo:_____";
    }

    //INSERIMENTO
    //Inserimento Aeroporto
    void INSERIMENTO_AEROPORTO()
    char risp[2];
      
    FILE *aero;
    if((
    aero=fopen("aeroporto.txt","r"))==NULL)aero=fopen("aeroporto.txt","w+");
        else { 
    fclose(aero);
           
    aero=fopen("aeroporto.txt","r+");
         }
          while (!
    feof(aero))
        {
    fread(&aeroporto,sizeof(struct aero1),1,aero); 
         if( 
    feof(aero) )
            break;}
      
    VIS_AEROPORTO();
       
    gotoxy(14,24);
        
    cout<<"Premi * per terminare";
        
    gotoxy(12,5);
        
    gets(aeroporto.id_aeroporto);
        while (
    strcmp(aeroporto.id_aeroporto,"*")!=0)
        {
         
    gotoxy(39,5);
         
    gets(aeroporto.nome);
         
    gotoxy(12,7);
         
    gets(aeroporto.citta);
         
    gotoxy(42,7);
         
    gets(aeroporto.nazione);
         
    gotoxy(15,9);
         
    cin>>(aeroporto.fusorario);
         
    cin.ignore();
         
    aeroporto.canc=0;
         
    gotoxy(32,11);
         
    cout<<"Confermi?(s/n) ";
         do 
         {
          
    gotoxy(47,11);
          
    cin>>risp;
          
    cin.ignore();
         }while(!((
    strcmp(risp,"n")==0)||(strcmp(risp,"N")==0)||(strcmp(risp,"S")==0)||(strcmp(risp,"s")==0)));
          if ((
    strcmp(risp,"s")==0)||(strcmp(risp,"S")==0)) {
          
    fwrite(&aeroporto,1sizeof(struct aero1),aero);                      
                         
         }
          
    VIS_AEROPORTO();    
          
    gotoxy(14,24);
          
    cout<<"Premi * per terminare";
          
    gotoxy(12,5);
          
    gets(aeroporto.id_aeroporto);     
        }
        
    fclose(aero);      
        return;      
        }
        
    //Inserimento Volo
    void INSERIMENTO_VOLO()
    int p;
        
    char citta[21];
        
    char citta2[21];
        
    char risp[2];
    FILE *fvolo;
      if((
    fvolo=fopen("volo.txt","r"))==NULL)
        
    fvolo=fopen("volo.txt","w+");
       else 
        {
          
    fclose(fvolo);
          
    fvolo=fopen("volo.txt","r+");
        }
      while (!
    feof(fvolo))
      {
         
    fread(&volo,sizeof(struct volo1),1,fvolo); 
         if( 
    feof(fvolo) )
            break;
         }
        
    VIS_VOLO();
        
    gotoxy(14,24);
        
    cout<<"Premi * per terminare";
        
    gotoxy(12,5);
        
    gets(volo.id_volo);
        while (
    strcmp(volo.id_volo,"*")!=0)
        {
        do{
           
    gotoxy(33,5);
           
    cin>>volo.ora_partenza.ora;
           
    cin.ignore();
           }while(
    volo.ora_partenza.ora<0||  volo.ora_partenza.ora>24);    
        do{
            
    gotoxy(36,5);
            
    cin>>volo.ora_partenza.minuti;
            
    cin.ignore();
           }while(
    volo.ora_partenza.minuti<0||  volo.ora_partenza.minuti>59);   
        do{
           
    gotoxy(52,5);
           
    cin>>volo.ora_arrivo.ora;
           
    cin.ignore();
           }while(
    volo.ora_arrivo.ora<0||  volo.ora_arrivo.ora>24);    
        do{
            
    gotoxy(55,5);
            
    cin>>volo.ora_arrivo.minuti;
            
    cin.ignore();
           }while(
    volo.ora_arrivo.minuti<0||  volo.ora_arrivo.minuti>59);
        
    gotoxy(21,7);
        
    gets(citta);
        
    p=1;
        
    RIC_CITTA(citta,p);
        
    gotoxy(31,20);
        
    gets(volo.cod_partenza);
        
    gotoxy(57,7);
        
    gets(citta2);
        
    p=2;
        
    RIC_CITTA(citta2,p);
        
    gotoxy(67,20);
        
    gets(volo.cod_arrivo);    
        
    gotoxy(32,22);
        
    cout<<"Confermi?(s/n) ";
        do 
         {
          
    gotoxy(47,22);
          
    cin>>risp;
          
    cin.ignore();
         }while(!((
    strcmp(risp,"n")==0)||(strcmp(risp,"N")==0)||(strcmp(risp,"S")==0)||(strcmp(risp,"s")==0)));
        if ((
    strcmp(risp,"s")==0)||(strcmp(risp,"S")==0))
         
    fwrite(&volo,1sizeof(struct volo1),fvolo);   
        
    VIS_VOLO();
        
    gotoxy(14,24);
        
    cout<<"Premi * per terminare";
        
    gotoxy(12,5);
        
    gets(volo.id_volo);            
      }
    fclose(fvolo);
    return;
        }
     
    //Ricerca parziale dell'aeroporto    
     
    void RIC_CITTA (char citta[21],int &a)
    {
      
    int y;
      
    int x1;
      
    int x2;
      
    y=11;
      if (
    a==1){
       
    x1=5;
       
    x2=12;}
       else
       {
    x1=43;
        
    x2=50;      
       }
      
    char citta2[6];
      
    gotoxy(x1,9);
      
    cout<<"Codice Nome Aeroporto";
       
    FILE *aero;
       
    aero=fopen("aeroporto.txt","r+");
      
    int trovato=0;
      while  (!
    feof(aero))
      {
    fread(&aeroporto,sizeof(struct aero1),1,aero); 
         if( 
    feof(aero) )
            break;

      if (
    strcmp(aeroporto.citta,citta)==&&(aeroporto.canc==0))
      { 
    gotoxy(x1,y);
        
    cout<<aeroporto.id_aeroporto;
        
    gotoxy(x2,y);
        
    cout<<aeroporto.nome
        
    y+=1;     
       }
       }      
       if (
    y==11){
        
    gotoxy(x1,y);       
        
    cout<<"Nessun aeroporto con quel nome";
        
    gotoxy(21,7);
        
    cin>>(citta2);
        
    cin.ignore();
        
    RIC_CITTA(citta2,a);        
        }
      return;
     }    
       

    // MENU''
    // parte in cui sono disegnati tutti i menu' del programma

    int MENU_VOLO_AEROPORTO()
    {
        
    int scelta2;
        do
        {
            
    system("cls");
            
    cout<<"1 - Volo"<<endl;
            
    cout<<"2 - Aeroporto"<<endl;
            
    cout<<"Operazione scelta: ";
            
    cin>>scelta2;
        }while(
    scelta2<1||scelta2>2);
        return 
    scelta2;
    }

    int MENU_ADMIN()
    {
        
    int scelta;
        do
        {   
            
    system("cls");
            
    cout<<"Menu'' Amministratore: "<<endl;
            
    cout<<"1 - Inserimento"<<endl;
            
    cout<<"2 - Modifica"<<endl;
            
    cout<<"3 - Ricerca"<<endl;
            
    cout<<"4 - Cancellazione"<<endl;
            
    cout<<"5 - Ripristino"<<endl;
            
    cout<<"6 - Uscita"<<endl;
            
    cout<<"Operazione scelta: ";
            
    cin>>scelta;
        }while(
    scelta<1||scelta>7);
        return 
    scelta;
    }

    int MENU1()
    {
        
    int scelta;
        do
        {   
    scelta=0;
            
    system("cls");
            
    cout<<"Menu' Principale:"<<endl;
            
    cout<<"1 - Amministratore"<<endl;
            
    cout<<"2 - Utente"<<endl;
            
    cout<<"3 - Uscita"<<endl;
            
    cout<<"Operazione scelta: ";
            
    cin>>scelta;
        }while( 
    scelta<1||scelta>4);
        return 
    scelta;
    }

    //Login nella parte amministratore

    void LOGIN()
    {   
    int scelta;
        
    int psw;
        
    cout<<"Inserire la password: ";
        
    cin>>psw;
        if (
    psw==0000)
        {
            
    scelta=MENU_ADMIN();
            while(
    scelta!=6)
            {
                
    SMISTAMENTO2(scelta);
                
    scelta=MENU_ADMIN();
                return;
            }
        }
        else
        {
            
    cout<<"Password errata!"<<endl;
            
    system ("PAUSE");
            return;
        }
    }

    // SMISTAMENTI
    // Parte in cui ci sono tutti gli smistamenti del programma, cioè quelli che indirizzano le scelte dell'utente nei vari menù
    // Parametri passati: scelta, scelta2, scelta3

    void SMISTAMENTO2(int scelta)
    int scelta2;
        switch(
    scelta)
        {
            case 
    :
                
    scelta2=MENU_VOLO_AEROPORTO();
                switch(
    scelta2)
                {
                    case 
    :
                        
    INSERIMENTO_VOLO();
                        break;
                    case 
    :
                        
    INSERIMENTO_AEROPORTO();
                        break;
                }
                break;
            
        }            
        return;
    }

    void SMISTAMENTO1(int scelta)
    {
        switch(
    scelta)
        {
            case 
    :
                
    LOGIN();
                break;
            case 
    :
     break;
        }
        return;
    }

    //Main Principale

    int main()
    int scelta;
        
    INTESTAZIONE();
        
    scelta=MENU1();
        while (
    scelta!=3)
        {
            
    SMISTAMENTO1(scelta);
            
    scelta=MENU1();
        }
        
    SALUTI();
        
    system ("PAUSE");
        return 
    EXIT_SUCCESS;    


    Provate a farlo runnare voi...xk io non c capisco più niente!

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480

    Re: [c++] Problema Salto del gets()

    Originariamente inviato da michela85cancro
    Solo che ogni volta che richiedo un parametro all'inizio di ogni procedura, la salta.
    Cioè?

    Spiegati meglio ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Quando scelgo dal menu di amministratore una cosa a caso, per esempio inserimento, mi salta il codice (che sarebbe il primo campo) che serve per il controllo sul ciclo, infatti finché l'utente non preme * non esce dal ciclo, però il controllo salta se lui non mi fa inserire il codice, e fa così non solo con l'inserimento, ma anche con la modifica, ricerca, ecc... quindi se risolvo il problema per uno risolvo anche quello delle altre procedure

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Hai usato la

    cin.ignore();

    dopo l'input dell'opzione di menu?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    NON CI CREDO! ERA QUELLO! Che scemo ke sono!sempre il cin.ignore(); ke mi frega! Anche l'ultima volta, l'ho rifatto come errore perché la struttura dei menù lo avevo fatta tempo fa!


    Grazie ancora! Potete chiudere!

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da michela85cancro
    Grazie ancora! Potete chiudere!
    Di nulla ... qui non si chiudono i thread ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    :P sono abituato su altri forum! Cmq mi trovo bene qui, sto usando l'account di mia sorella e credo che me ne farò uno mio! Bel forum e grazie ancora oregon!

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