Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di colde
    Registrato dal
    Feb 2001
    Messaggi
    1,802

    [C++] Problema da neofita su controllo dati inseriti

    Ciao a tutti,
    sto facendo un programmino stupidissimo dove l'utente inserisce due numeri e successivamente viene visualizzato quello maggiore e minore.
    Fino a qui niente di chè, il problema sorge quando voglio fare un controllo sul dato immesso. Se io inserisco ad esempio un carattere come primo numero, il programma si comporta in maniera strana:
    salta l'inserimento del secondo numero e mi da direttamente il risultato interpretando il carattere con il suo valore numerico corrispondente (o almeno credo).

    Ora, vorrei fare un controllo sul dato immesso, sia per il primo numero che per il secondo e finchè non viene inserito correttamente il valore richiesto, deve ripetere l'inserimento del numero corrispondente (il primo o il secondo).

    Ho provato ad inserire un if dopo i vari inserimenti ma vengono ignorati. Come posso fare sta cosa? Ho pensato che si debba richiamare una funzione che faccia il controllo ma non ne sono sicuro e non la so fare.

    Sto correndo troppo? Potete darmi una mano?

    Questo è il codice che uso:

    codice:
    int main()
    {
          int num1, num2;
    
          cout << "Segui le indicazioni proposte e vedrai che poi succede qualcosa.\n\n";
          cout << "Inserisci il primo numero intero: ";
          cin >> num1;
          cout << "Inserisci il secondo numero intero: ";
          cin >> num2;
    
          if(num1 == num2) cout << "Hai inserito due numeri uguali";
          if(num1 < num2){
                cout << "Il numero maggiore e' " << num2 << " e quello minore e' " << num1;
          }else{
                cout << "Il numero maggiore e' " << num1 << " e quello minore e' " << num2;
          }
          cout << "\nGrazie per aver fatto sta cretinata!\n\n";
          system("PAUSE");
          return 0;
    }

    Grazie
    www.beppegrillo.it
    Il blog di Beppe!!

  2. #2
    Utente di HTML.it L'avatar di colde
    Registrato dal
    Feb 2001
    Messaggi
    1,802
    20 visite e neanche una risposta? VVoVe:
    Topic troppo stupido?
    www.beppegrillo.it
    Il blog di Beppe!!

  3. #3
    Utente di HTML.it L'avatar di infinitejustice
    Registrato dal
    Nov 2001
    residenza
    Barcelona
    Messaggi
    772
    potresti fare un do while con le funzioni di libreria del C (isalpha, ...) sui dati immessi
    Live fast. Troll hard.
    Pythonist | Djangonaut | Puppeteer | DevOps | OpenStacker | Lost in malloc
    Team Lead @Gameloft Barcelona

  4. #4
    Utente di HTML.it L'avatar di colde
    Registrato dal
    Feb 2001
    Messaggi
    1,802
    isalpha cosa farebbe? Immagino sia un'istruzione, giusto?
    Ma se ad esempio volessi creare una funzione che controlli i dati inseriti dall'utente in modo da poterla riutilizzare più volte nello stesso programma, come dovrei fare? Non ti chiedo di mostrarmi il codice corretto, mi basta solo un esempio, giusto per capire il concetto.

    Grazie
    www.beppegrillo.it
    Il blog di Beppe!!

  5. #5
    Utente di HTML.it L'avatar di colde
    Registrato dal
    Feb 2001
    Messaggi
    1,802
    OK, ho fatto come suggerito:

    codice:
    int main()
    {
          int num1, num2;
    
          cout << "Segui le indicazioni proposte e vedrai che poi succede qualcosa.\n\n\n";
    
    
          //ciclo che controlla l'inserimento del dato immesso. Finche il dato non risulta un numero il ciclo si ripete
          do {
             if(!(num1)){
             cout << "Il dato inserito non è in formato numerico.\n\nInserisci nuovamente il primo numero intero: ";
             }else{
             cout << "Inserisci il primo numero intero: ";
             }
             cin >> num1;
          } while(isdigit(num1));
    
          //ciclo che controlla l'inserimento del dato immesso. Finche il dato non risulta un numero il ciclo si ripete
          do {
             if(!(num2)){
             cout << "Il dato inserito non è in formato numerico.\n\nInserisci nuovamente il secondo numero intero: ";
             }else{
             cout << "Inserisci il secondo numero intero: ";
             }
             cin >> num2;
          } while(isdigit(num2));
    
          if(num1 == num2) cout << "\n\nHai inserito due numeri uguali";
          if(num1 < num2){
                cout << "\n\nIl numero maggiore e' " << num2 << " e quello minore e' " << num1;
          }else{
                cout << "\n\nIl numero maggiore e' " << num1 << " e quello minore e' " << num2;
          }
          cout << "\n\nGrazie per aver fatto sta cretinata!\n\n";
          system("PAUSE");
          return 0;
    }
    Ma non funziona. Se inserisco un carattere il programma mi va in loop continuando a visualizzarmi il testo per inserire il numero. Perchè? Concettualmente mi sembra corretto il codice. :master:
    www.beppegrillo.it
    Il blog di Beppe!!

  6. #6
    Utente di HTML.it L'avatar di colde
    Registrato dal
    Feb 2001
    Messaggi
    1,802
    Giusto per completare il post, sono riuscito a farlo andare, non mi è assolutamente chiaro il motivo ma funziona.

    Questo il codice finale:

    codice:
    int main()
    {
          char num1, num2;
    
          cout << "Segui le indicazioni proposte e vedrai che poi succede qualcosa.\n\n\n";
    
    
          //ciclo che controlla l'inserimento del dato immesso. Finche il dato non risulta un numero il ciclo si ripete
          do {
             if(num1){
             cout << "Il dato inserito non e' in formato numerico.\n\nInserisci nuovamente il primo numero intero: ";
             }else{
             cout << "Inserisci il primo numero intero: ";
             }
             cin >> num1;
          } while(isalpha(num1));
    
          //ciclo che controlla l'inserimento del dato immesso. Finche il dato non risulta un numero il ciclo si ripete
          do {
             if(num2){
             cout << "Il dato inserito non e' in formato numerico.\n\nInserisci nuovamente il secondo numero intero: ";
             }else{
             cout << "Inserisci il secondo numero intero: ";
             }
             cin >> num2;
          } while(isalpha(num2));
    
          if(num1 == num2) {
                cout << "\n\nHai inserito due numeri uguali";
          }else if(num1 < num2){
                cout << "\n\nIl numero maggiore e' " << num2 << " e quello minore e' " << num1;
          }else if(num1 > num2){
                cout << "\n\nIl numero maggiore e' " << num1 << " e quello minore e' " << num2;
          }
          cout << "\n\nGrazie per aver fatto sta cretinata!\n\n";
          system("PAUSE");
          return 0;
    }
    Più che altro non capisco perchè assegnando le variabili come char e utilizzando isalpha riesce a capire se è stato inserito un numero o un carattere. Le variabili dovrebbero essere impostate come interi invece che caratteri, visto che bisogna inserire un numero. Anche gli if iniziali non li ho capiti, dovrebbero essere invertiti i testi. Dubito che qualcuno mi darà delucidazioni quindi chiudo semplicemente qui la discussione. Magari più avanti riuscirò a capire da solo.

    Grazie a colui che mi ha instradato nella direzione giusta.
    www.beppegrillo.it
    Il blog di Beppe!!

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.