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

    [C++]Problema fflush e Sleep( )

    Salve a tutti Ho un problema con un programma scritto in c++. Consiste in un bancomat e l'abbiamo realizzato in due, ecco perchè ci sono due file.
    In pratica il problema si pone alla fine del main, quando si avvia un ciclo for che, combinato alla funzione Sleep( ), genera un timer. Se durante questa pausa si preme qualche tasto sulla tastiera, me lo ritrovo scritto nella nuova videata: ho già provato ad usare fflush(stdin) come ho fatto per altri casi, ma in quel particolare punto e solo lì non funziona.
    Idee? Grazie in anticipo e vi "avverto" che è il frutto di due ragazzi di 3° superiore che hanno voluto ampliare una traccia "troppo banale" dataci dal professore

  2. #2
    main.cpp

    codice:
    #include <iostream>#include <string>
    #include <vector>
    #include "scelta.h"
    #include <windows.h>
    
    
    #define DimArray 3
    
    
    using namespace std;
    
    
    extern void error();
    extern void tab();
    extern void tal();
    extern void Prelievo();
    extern void Deposito();
    extern void TabMan();
    extern void ContCorr();
    extern void EstrCont();
    extern void FuoriServ();
    extern void carta();
    extern void Rosso();
    
    
    int NumConto[DimArray];
    int Pin[DimArray] = {0000, 0001, 0002};
    int NumDep[DimArray];
    int NumPrel[DimArray];
    int cont[6]={50, 50, 50, 50, 150, 200};
    int tagli[6]={500, 200, 100, 50, 20, 10};
    char ch;
    int N, scelta, InputConto, i;
    
    
    bool ciclo, cart;
    
    
    int main(){
        int sec[2];
        int min;
        system("color 0a");
        do {
           cart=false;
           system("CLS");
           carta();
           do {
              system("CLS");
              ciclo=true;
              if (InputConto==0) {
                 TabMan();
                 cout<<"Scelta: ";
                 cin>>scelta;
                 if (scelta < 1 || scelta > 4) {
                      error();
                      ch= getchar();
                      cout<< "Scelta non valida!"<<endl;
                      ch= getchar();
                       cout<< "Reinserire la scelta!"<<endl;
                       ch= getchar();
                       fflush(stdin);
                 } else {
                     cout<<endl;
                     switch (scelta) {
                            case 1: {         Deposito();
                                              ch = getchar();
                                              ch = getchar();
                                    } break;
                            case 2: {         ContCorr();
                                              ch = getchar();
                                              ch = getchar();
                                    } break;
                            case 3: {         system("CLS");
                                              cout<<"Inserire numero di conto"<<endl;
                                              cin>>InputConto;
                                              EstrCont();
                                              InputConto=0;
                                              ch = getchar();
                                              ch = getchar();
                                    } break;
                            case 4: {         ciclo=false;
                                    } break;
                     }
                     fflush(stdin);
                 }  
              } else {
                   tab();
                   cout<<"Scelta: ";
                   cin>>scelta;
                   if (scelta < 1 || scelta > 4) {
                      error();
                      ch= getchar();
                      cout<< "Scelta non valida!"<<endl;
                      ch= getchar();
                       cout<< "Reinserire la scelta!"<<endl;
                       ch= getchar();
                       fflush(stdin);
                   } else {
                     cout<<endl;
                     switch (scelta) {
                            case 1: {         ciclo=false;
                                              if (NumConto[InputConto]>0) {
                                                     NumPrel[InputConto]++;
                                                     Prelievo();
                                                     ch = getchar();
                                              } else {
                                                     Rosso();
                                                     ch = getchar();
                                              }
                                    } break;
                            case 2: {         ciclo=false;
                                              NumDep[InputConto]++;
                                              Deposito();
                                    } break;
                            case 3: {         EstrCont();
                                              ch = getchar();
                                              ch = getchar();
                                    } break;
                            case 4: {         ciclo=false;
                                    } break;
                     }
                     fflush(stdin);
                   }
              }
            } while (ciclo==true);
            min=2;
            sec[0]=0;
            sec[1]=0;
            for (i=120;i!=0;i--) {
                system("CLS");
                if (GetAsyncKeyState(VK_NUMPAD0)) {
                       cart=true;
                }
                if (cart==true) {
                        cout<<"Attendere "<<min<<":"<<sec[0]<<sec[1]<<endl;
                } else if (i>60) {
                       cout<<"Prelevare la carta(premere 0) entro "<<sec[0]<<sec[1]<<" secondi ed attendere "<<min<<":"<<sec[0]<<sec[1]<<endl;
                } else {
                       cout<<"Carta non prelevata. Per riottenerla recarsi presso la propria banca \n"<<"Attendere "<<min<<":"<<sec[0]<<sec[1]<<endl;
                }
                if (sec[1]==0) {
                   if (sec[0]==0) {
                      min--;
                      sec[0]=5;
                      sec[1]=9;
                   } else {        
                     sec[0]--;
                     sec[1]=9;
                   }
                } else {
                   sec[1]--;
                }
                Sleep(1000);
            }
            ciclo=false;
            for (i=0; i<6; i++) {
                if (cont[i]!=0) {
                   ciclo=true;
                }
            }
        } while (ciclo==true); 
        FuoriServ();          
    }
    
    
    void Prelievo() {
             system("CLS");
             tal();
             cout<<"Scelta: ";
             cin>>scelta;
             if (scelta < 1 || scelta > 11){
                error();
                ch= getchar();
                cout<< "Scelta non valida!"<<endl;
                ch= getchar();
                cout<< "Reinserire la scelta!"<<endl;
                ch= getchar();
                fflush(stdin);
             } else {
                system("CLS");    
                cout<<endl;    
                switch (scelta){
                       case 1: {     cout<< "Hai scelto di prelevare 20EURO....!"<<endl;
                                     ch = getchar();
                                     ch = getchar();
                                     N=20;
                                     PrelLib();
                                } break;
                       case 2: {     cout<< "Hai scelto di prelevare 50EURO....!"<<endl;
                                     ch = getchar();
                                     ch = getchar();
                                     N=50;
                                     PrelLib();
                                }break;
                       case 3: {     cout<< "Hai scelto di prelevare 100EURO....!"<<endl;
                                     ch = getchar();
                                     ch = getchar();
                                      N=100;
                                     PrelLib();   
                                } break;
                       case 4: {     cout<< "Hai scelto di prelevare 150EURO....!"<<endl;
                                     ch = getchar();
                                     ch = getchar();
                                     N=150;
                                     PrelLib();
                                }break;
                       case 5: {     cout<< "Hai scelto di prelevare 200EURO....!"<<endl;
                                     ch = getchar();
                                     ch = getchar();
                                     N=2000;
                                     PrelLib();
                                } break;
                       case 6: {     cout<< "Hai scelto di prelevare 250EURO....!"<<endl;
                                     ch= getchar();
                                     ch = getchar();
                                     N=200;
                                     PrelLib();
                                } break;
                       case 7: {     cout<< "Hai scelto di prelevare 500EURO....!"<<endl;
                                     ch= getchar();
                                     ch = getchar();
                                     N=500;
                                     PrelLib();
                                } break;
                       case 8: {     cout<< "Hai scelto di prelevare 750EURO....!"<<endl;
                                     ch= getchar();
                                     ch = getchar();
                                     N=750;
                                     PrelLib();
                               } break;
                       case 9: {     cout<< "Hai scelto di prelevare 1000EURO....!"<<endl;
                                     ch= getchar();
                                     ch = getchar();
                                     N=1000;
                                     PrelLib();
                               } break;
                       case 10: {     do{
                                        cout<<"Quanto vuole prelevare? \nInserire 0 per uscire"<<endl;
                                        cin>>N;
                                        cout<<endl;
                                        if (N==0) {
                                              NumPrel[InputConto]--;
                                              ciclo=true;
                                        } else if (N<0) {
                                           cout<<"Impossibile rilasciare un importo negativo"<<endl;
                                        } else if (N%10!=0) {
                                           cout<<"Disponibili sono importi multipli di 10"<<endl;
                                        }
                                     } while (N<0 || N%10!=0);
                                     PrelLib();
                                     ch = getchar();
                                }break;
                       case 11: {      NumPrel[InputConto]--;
                                       ciclo=true;
                                } break;
                }
                fflush(stdin);              
             }
    }                                   
    
    
    void error()
    {
        cout<<"##########"<<endl;
        cout<<"  ERRORE! "<<endl;
        cout<<"##########"<<endl;
    }
    
    
    void tab()
    { 
        cout<<"               ************************************   "<<endl;
        cout<<"               *     BANCOMAT  Longo&Amodio       *   "<<endl;
        cout<<"               *                                  *   "<<endl;
        cout<<"               *   Scegli le seguenti opzioni     *   "<<endl;
        cout<<"               *    1) Prelievo                   *   "<<endl;
        cout<<"               *    2) Deposito                   *   "<<endl;
        cout<<"               *    3) Estratto Conto             *   "<<endl;
        cout<<"               *    4) USCITA                     *   "<<endl;
        cout<<"               *                                  *   "<<endl;
        cout<<"               *                                  *   "<<endl;
        cout<<"               ************************************   "<<endl;
        cout<<endl;
        cout<<endl;
    }
    
    
    void tal()
    { 
        cout<<"               ************************************   "<<endl;
        cout<<"               * IMPORTO DA PRELEVARE             *   "<<endl;
        cout<<"               *                                  *   "<<endl;
        cout<<"               *   Scegli i seguenti tagli        *   "<<endl;
        cout<<"               *    1)  20EURO                    *   "<<endl;
        cout<<"               *    2)  50EURO                    *   "<<endl;
        cout<<"               *    3)  100EURO                   *   "<<endl;
        cout<<"               *    4)  150EURO                   *   "<<endl;
        cout<<"               *    5)  200EURO                   *   "<<endl;
        cout<<"               *    6)  250EURO                   *   "<<endl;
        cout<<"               *    7)  500EURO                   *   "<<endl;
        cout<<"               *    8)  750EURO                   *   "<<endl;
        cout<<"               *    9)  1000EURO                  *   "<<endl;
        cout<<"               *   10)  Scegli importo            *   "<<endl;
        cout<<"               *   11)  USCITA                    *   "<<endl;    
        cout<<"               *                                  *   "<<endl;
        cout<<"               ************************************   "<<endl;
        cout<<endl;
        cout<<endl;
    }
    Ultima modifica di Sheldon97; 11-01-2014 a 19:58

  3. #3
    scelta.h
    codice:
    #include <iostream>
    #include <string>
    
    
    #define DimArray 3
    
    
    using namespace std;
    
    
    extern void TabDep();
    extern void error();
    extern void Rosso();
    
    
    extern int scelta, N, InputConto, i;
    extern int NumConto[];
    extern int Pin[];
    extern int NumDep[];
    extern int NumPrel[];
    extern int tagli[];
    extern int cont[];
    extern char ch;
    extern bool ciclo;
    
    
    int InputPin;
    int banc[6];
    
    
    void PrelLib() {
         int soldi;
         char risp;
         bool vero;
         fflush(stdin);
         for (i=0; i<6; i++) {
             banc[i]=0;
         }
         if (N>NumConto[InputConto]) {
                  Rosso();
                  NumPrel[InputConto]--;
         } else {
                for (i=0; i<6; i++) {
                    while (N>=tagli[i] && cont[i]>0) {
                       N-=tagli[i];
                       cont[i]--;
                       banc[i]++;
                    }
                 }
                 if (N>0) {
                          cout<<"L'importo selezionato non e' disponibile"<<endl;
                          NumPrel[InputConto]--;
                          for (i=0; i<6; i++) {
                              cont[i]+=banc[i];
                              banc[i]=0;
                          }
                          vero=false;
                          soldi=0;
                          for (i=0; i<6; i++) {
                              if (cont[i]==0) {
                                   vero=true;
                              } else {
                                   soldi=soldi+(cont[i]*tagli[i]);
                              }
                          }
                          if (vero) {
                             cout<<"Sono disponibili solamente "<<soldi<<" euro"<<endl;   
                             ciclo=true;                      
                          }
                 } else {
                        for (i=0; i<6; i++) {
                            cout<<"Banconote da "<<tagli[i]<<"EURO: "<<banc[i]<<endl;
                        }
                 }
                 soldi=0;
                 for (i=0; i<6; i++) {
                     soldi=soldi+(banc[i]*tagli[i]);
                 }
                 NumConto[InputConto]-=soldi;
         }
         ch = getchar();
         fflush(stdin);
    }
    
    
    void Deposito() {
         for (i=0; i<6; i++) {
             banc[i]=0;
         }
         system("CLS");
         TabDep();
         cout<<"Scelta: ";
         cin>>scelta;
         if (scelta>=0 && scelta<6) {
                cout<<endl;
                system("CLS");
                cout<<"Quante banconote da "<<tagli[scelta]<<"EURO vuoi depositare?";
                cin>>banc[scelta];
                cont[scelta]+=banc[scelta];
                NumConto[InputConto]=NumConto[InputConto]+(banc[scelta]*tagli[scelta]);
         } else if (scelta==6) {
                cout<<"Quant'è l'importo dell'assegno?";
                cin>>N;
                NumConto[InputConto]+=N;
         } else if (scelta==7) {
                ciclo=true;
                NumDep[InputConto]--;
         } else {
                error();
                ch= getchar();
                cout<< "Scelta non valida!"<<endl;
                   ch= getchar();
                   cout<< "Reinserire la scelta!"<<endl;
                   ch= getchar();
                   fflush(stdin);
         }   
    }
    
    
    void ContCorr() {
         system("CLS");
         cout<<" Numero di conto | Soldi presenti sul conto | Pin del conto "<<endl;
         cout<<endl;
         for (N=1; N<DimArray; N++) {
             cout<<">   "<<N<<"   |   "<<NumConto[N]<<"   | "<<Pin[N]<<"   <"<<endl;
         }
    }
         
    void EstrCont() {
         if (InputConto<1 || InputConto>=DimArray) {
                 error();
                 cout<<"Numero di conto inesistente"<<endl;
         } else {
                cout<<" Soldi presenti sul conto: "<<NumConto[InputConto]<<endl;
                cout<<" Prelievi effettuati: "<<NumPrel[InputConto]<<endl;
                cout<<" Depositi effettuati: "<<NumDep[InputConto]<<endl;
         }    
    }
    
    
    void TabDep() { 
        cout<<"               ************************************   "<<endl;
        cout<<"               *       COSA VUOI DEPOSITARE?      *   "<<endl;
        cout<<"               *                                  *   "<<endl;
        cout<<"               *   Scegli le seguenti opzioni     *   "<<endl;
        cout<<"               *    0) Banconote da 500           *   "<<endl;    
        cout<<"               *    1) Banconote da 200           *   "<<endl;
        cout<<"               *    2) Banconote da 100           *   "<<endl;
        cout<<"               *    3) Banconote da 50            *   "<<endl;
        cout<<"               *    4) Banconote da 20            *   "<<endl;
        cout<<"               *    5) Banconote da 10            *   "<<endl;
        cout<<"               *    6) Assegni                    *   "<<endl;
        cout<<"               *    7) USCITA                     *   "<<endl;
        cout<<"               *                                  *   "<<endl;
        cout<<"               ************************************   "<<endl;
        cout<<endl;
        cout<<endl;
    }
    
    
    void TabMan() {
         cout<<"               ************************************   "<<endl;
         cout<<"               *         MANUTENZIONE             *   "<<endl;
         cout<<"               *                                  *   "<<endl;
         cout<<"               *  Scegli fra le seguenti opzioni  *   "<<endl;
         cout<<"               *   1) Aggiunta banconote          *   "<<endl;
         cout<<"               *   2) Dati dei conti correnti     *   "<<endl;
         cout<<"               *   3) Estratti conto              *   "<<endl;
         cout<<"               *   4) USCITA                      *   "<<endl;
         cout<<"               *                                  *   "<<endl;
         cout<<"               *                                  *   "<<endl;
         cout<<"               ************************************   "<<endl;
         cout<<endl;
         cout<<endl;
    }
    
    
    void FuoriServ() {
         cout<<"               ************************************   "<<endl;
         cout<<"               *         BANCOMAT FUORI           *   "<<endl;
         cout<<"               *            SERVIZIO              *   "<<endl;
         cout<<"               *                                  *   "<<endl;
         cout<<"               *   Ci scusiamo per il disagio     *   "<<endl;
         cout<<"               *                                  *   "<<endl;
         cout<<"               *                                  *   "<<endl;
         cout<<"               ************************************   "<<endl;
         cout<<endl;
         cout<<endl;
    }
    
    
    void carta() {
      fflush(stdin);   
      do {
         cout<<"               ************************************   "<<endl;
         cout<<"               *                                  *   "<<endl;
         cout<<"               * Inserire il numero del bancomat  *   "<<endl;
         cout<<"               *                                  *   "<<endl;
         cout<<"                                ";
         cin>>InputConto;
         if (InputConto<DimArray) {
            cout<<"\n               *                                  *   "<<endl;
            cout<<"               * Inserire il pin del bancomat     *   "<<endl;
            cout<<"               *                                  *   "<<endl;
            cout<<"                                ";
            cin>>InputPin;
            if (InputPin!=Pin[InputConto]) {   
               system("CLS");                                                                                                       
               cout<<"               ************************************   "<<endl;
               cout<<"               *                                  *   "<<endl;
               cout<<"               *            PIN ERRATO            *   "<<endl;
               cout<<"               *                                  *   "<<endl;
               cout<<"               ************************************   "<<endl;
               ch = getchar();
            } else {
              cout<<"\n               *                                  *   "<<endl;
              cout<<"               *                                  *   "<<endl;
              cout<<"               *                                  *   "<<endl;
              cout<<"               ************************************   "<<endl;
              cout<<endl;
              cout<<endl;
              ch = getchar();
            }
         } else {
                system("CLS");                                                                                                       
                cout<<"               ************************************   "<<endl;
                cout<<"               *                                  *   "<<endl;
                cout<<"               *    NUMERO DI CARTA NON VALIDO    *   "<<endl;
                cout<<"               *                                  *   "<<endl;
                cout<<"               ************************************   "<<endl;
                ch = getchar();
         }
         ch = getchar();
         fflush(stdin);
         system("CLS");
       } while (InputPin!=Pin[InputConto] || InputConto>DimArray);
    }
    
    
    void Rosso() {
         system("CLS");
         cout<<"               ************************************   "<<endl;
         cout<<"               *                                  *   "<<endl;
         cout<<"               *   NON SONO PRESENTI ABBASTANZA   *   "<<endl;
         cout<<"               *          SOLDI SUL CONTO         *   "<<endl;
         cout<<"               *                                  *   "<<endl;
         cout<<"               ************************************   "<<endl;
         ch = getchar(); 
         fflush(stdin);  
    }
    Ultima modifica di Sheldon97; 11-01-2014 a 19:58

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,472
    Non ho capito bene il problema né cosa c'entri la fflush

    In ogni caso la Sleep è bloccante e quindi per un secondo il thread è bloccato.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    In pratica il problema si pone alla fine del main, quando si avvia un ciclo for che, combinato alla funzione Sleep( ), genera un timer. Se durante questa pausa si preme qualche tasto sulla tastiera, me lo ritrovo scritto nella nuova videata: ho già provato ad usare fflush(stdin) come ho fatto per altri casi, ma in quel particolare punto e solo lì non funziona.
    Cerco di spiegarmi meglio: lo Sleep blocca il thread per un secondo. ripetuto tramite un ciclo for per 120 volte il tutto sarà bloccato per 2 minuti. se durante questi due minuti l'utente preme dei tasti sulla tastiera, i caratteri corrispondenti verranno visualizzati appena il programma richiederà un input da tastiera. Io volevo utilizzare fflush per pulire lo stdin e non aver questo problema, ma per motivi a me sconosciuti non 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.