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

    [C++] Programma per risposta Si/No

    Salve a tutti, mi chiamo Andrea e ho 20 anni.. e sono alle prime armi con il C++! studio infatti da poco questo linguaggio in università ( 2 mesi ) e oggi mi sono imbattuto in un dilemma mentre stavo programmando liberamente a casa mia..
    Mi trovo a dover stampare su schermo una domanda, nel mio caso "Ci sono spese aggiuntive?", chiaramente con il cout, ma qui viene il mio dubbio.. voglio che il programma reagisca al mio input "si" oppure "no", e che nel caso scriva qualsiasi altra cosa mi stampi un messaggio d'errore del tipo "Per favore rispondi si o no".

    Spulciando qua e là ho trovato varie soluzioni, ma nessuna di queste è stata realmente funzionante.. avevo pensato di usare le variabili booleane.. con una cosa di questo tipo:
    codice:
    bool si = true;
    bool no = false;
    ...
    cout << "Ci sono spese aggiuntive?";
    cin >> ( non saprei cosa mettere qui.. ) 
    if (si) { cout << "inserisci la spesa.."; cin >> spesaagg }
    Scusate la mia imprecisione ma ripeto.. sono alle prime armi.. :P

    .. oppure avevo pensato di provare con delle variabili char.. quindi:
    codice:
    char risposta;
    ..
    cout << "Ci sono spese aggiuntive?";
    cin >> risposta;
    if (risposta=='si')
       {cout << "inserisci la spesa.."; cin >> spesaagg }
    ma nemmeno questa soluzione ha funzionato.. infatti il mio programma quando scrivo si (ma anche quando scrivo no, pallina, ciao e bingo) salta gli step successivi e conclude elaborando solo la parte di codice al di sopra di questo step.

    Spero di essere stato abbastanza chiaro.. in pratica non si tratta che di far riconoscere al programma che quando batto "si", mi deve chiedere a quanto ammontano queste spese aggiuntive, e quando batto no può procedere col resto del programma ( e se batto "ciao" che mi dia errore.. ma credo che capendo come far riconoscere al compilatore "si" o "no" non mi sarà difficile inserire un ciclo if con il controllo interno.. ).

    Nel caso non mi fossi spiegato bene o vi tornasse più utile posso anche incollare il programma intero per come l'ho compilato fino ad ora! Anche se credo che di per sè sia un problema molto semplice da risolvere per qualcuno che ha più esperienza di me
    Grazie dell'attenzione a chiunque risponderà! Chiaramente vi farò sapere se avrò risolto il problema :P

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Va bene la strada della variabile ma tieni presente che una variabile char non e' una stringa ma un solo carattere. Non puo' quindi contenere 'si' o 'no' ma semplicemente un carattere ...

    Quindi, in C++, utilizza una

    string risp;

    oppure una stringa del C fatta da tre caratteri (2 per la risposta e uno per il terminatore)

    char risp[3];
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    105
    Ciao,
    ho creato una bozza di programma con le tue richieste:
    codice:
    char positivo[]={"si"};
          char negativo[]={"no"};
          char risposta[3];
          RIPRENDI:
          cout << "Ci sono spese aggiuntive?";
          cin >> risposta;
          if (stricmp(risposta, positivo)== 0)             //Se la risposta è 'si'.
          {
                       int spese_add;
                       cout << "A quanto ammontano queste spese agguntive?: ";
                       cin >> spese_add;
                       }
          else if(strcmp(risposta, positivo)!=0 && strcmp(risposta, negativo) !=0 )         // se la risposta è diversa da 'si' e da 'no'.
          {
               cout << "Rispondere con un si oppure con un no!\n\n";
               goto RIPRENDI;
               }
          /*per quanto riguarda la risposta no, il programma salta il primo 
            if perchè risulta falso, fa lo stesso anche con l'else if, e 
            quindi continua con il programma*/
    Considera che non è l'unica soluzione possibile.
    Io ti ho proposto questa.

    Spero di esserti stato di aiuto...
    Facci sapere...

    Saluti Satore11

    P.S.Devi includere il file Header "string.h"

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    satore ... solo qualche precisazione ...

    Dovresti usare sempre la stricmp per i confronti ed evitare il goto, consigliando un ciclo ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    105
    Si hai ragione,
    ma sono anche io alle prime armi, questo è il mio primo aiuto.

    Spero di essere utile in qualche atra occasione.
    Grazie Oregon!

    Saluti Satore11

  6. #6
    Grazie ad entrambi per le risposte tempestive!
    In alternativa di usare il goto , che ciclo avrei potuto inserire? ( nell'esempio di Satore per esempio )

  7. #7
    codice:
    const char * positivo="si"; //non serve creare array modificabili, bastano puntatori a risorse incorporate nell'eseguibile
    const char * negativo="no";
    char risposta[3];
    bool riprova;
    do
    {
        cout << "Ci sono spese aggiuntive?";
        cin.getline(risposta,2); //in questo modo evito eventuali buffer overrun
        cin.sync(); //svuoto il buffer di input, che potrebbe contenere un '\n' di troppo
        if(!stricmp(risposta, positivo)) //se la risposta è 'si'.
        {
            int spese_add;
            cout << "A quanto ammontano queste spese agguntive?: ";
            cin >> spese_add;
            //...
            riprova=false;
        }
        else if(stricmp(risposta, positivo)!=0 && stricmp(risposta, negativo) !=0 )         // se la risposta è diversa da 'si' e da 'no'.
        {
            cout << "Rispondere con un si oppure con un no!\n\n";
            riprova=true;
        }
        else
            riprova=false;
    } while(riprova);
    Amaro C++, il gusto pieno dell'undefined behavior.

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.