Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    22

    C++ Controllo inserimento "forzato"....

    Salve a tutti!

    premetto che sono alle prime armi con questo stupendo linguaggio di programazzione.
    Per il momento, mi sto cimentando e sperimentando con degli esercizi, con l'IDE Dev, applicazioni console.

    Vi chiedo:

    tramite CIN e/o SCANF, è possibile OBBLIGARE il tipo di inserimento, ad esempio se è solo un numero o un carattere oltre ad OBBLIGARE, quanto meno riconoscere, in particolari situazioni, non oltre, ad esempio, un solo carattere e/o numero.

    Mi spiego meglio:

    ipotizziamo che CIN e/o SCANF, sono in attesa d'inserimento di una 'S' o 'N', per poter continurare il programma o abbandonarlo, ho notato che se inserisco qualche carattere di troppo, la CIN/SCANF ripete la richiesta tante volte quanti caratteri e/o numeri, erroneamente inseriti - abbastanza fastidioso, stesso discorso se sono in attesa di solo numeri e, in questo caso, erroneamente si inserisce uno o più caratteri, va letteralmente in palle.

    Spero di essere stato abbastanza chiaro e anticipatamente ringrazio per l'attenzione.
    Marco.

  2. #2
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219

    Re: C++ Controllo inserimento "forzato"....

    Originariamente inviato da MarkRed
    Salve a tutti!
    Mi spiego meglio:

    ipotizziamo che CIN e/o SCANF, sono in attesa d'inserimento di una 'S' o 'N', per poter continurare il programma o abbandonarlo, ho notato che se inserisco qualche carattere di troppo, la CIN/SCANF ripete la richiesta tante volte quanti caratteri e/o numeri, erroneamente inseriti [...]
    Questo se la scanf si trova in un ciclo, ma dipende dal codice.
    La scanf di per se con %c prende in input un carattere, e ne viene letto uno solo.
    Se chiedi in input una stringa tramite l' operatore << di cin:

    codice:
    string str;
    cin >> str;
    Qualsiasi sequenza di caratteri inserita viene considerata valida, perchè anche "123" è una stringa.L' unica cosa che puoi fare te è inserire questo codice in un ciclo, ed eventualmente ripetere il controllo se secondo te l' input non è valido:

    codice:
    string str;
    do
    {
        cin >> str;
    }while(str!="S" && str!="N");

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    22
    Grazie per il suggerimento.
    Dunque, ho trasformato risposta da - char risposta a string risposta e funziona egregiamente, nel senso che quasiasi cosa inserisca, superando la lunghezza di oltre un carattere, rinnova l'invito inserimento correttamente, solo che ora non funziona - risposta=toupper(risposta) perchè credo che esista solo nel "char" e non ho ancora trovato il corrispondente in "string".

    Resta ancora il problema, avendo dichiarato int variabile numerica intera, che l'invito tramite cout e lettura da cin, ad inserire uno e solo un numero e se erroneamente inserisco tutt'altro che un numero, il programma va proprio "in palle".

    Grazie dell'attenzione.
    Marco.

  4. #4
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Originariamente inviato da MarkRed
    [...] solo che ora non funziona - risposta=toupper(risposta) perchè credo che esista solo nel "char" e non ho ancora trovato il corrispondente in "string".
    Devi usare la funzione toupper su tutti i caratteri della stringa:

    codice:
    for(unsigned int i=0;i<str.size();i++)
        str[i]=toupper(str[i]);
    Resta ancora il problema, avendo dichiarato int variabile numerica intera, che l'invito tramite cout e lettura da cin, ad inserire uno e solo un numero e se erroneamente inserisco tutt'altro che un numero, il programma va proprio "in palle".
    Prova e vedi che succede.

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    22
    Ok!!! Grazie per il suggerimento :-)

    Il "maiuscolo" l'ho risolto, adesso provo con l'inserimento "forzato", nel caso di numeri, che l'utente non inserisca, erroneamente, tutt'altro che interi.

    Eventualmente, mi faccio "rivedere".
    Grazie per l'attenzione.
    Marco.

    P.S. - anche se non è bello un "copia e incolla" - devo capire, ancora studiando, il significato e il perchè di UNSIGNED.

  6. #6
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Originariamente inviato da MarkRed
    P.S. - anche se non è bello un "copia e incolla" - devo capire, ancora studiando, il significato e il perché di UNSIGNED.
    Ho usato l' unsigned int perche il metodo size() restituisce un tipo unsigned int, ma avrei potuto anche dichiararlo int, che è compatibile ma è proprio per essere pignoli. Perché certi compilatori danno un warning se confronti un int con un unsigned int.

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.