Visualizzazione dei risultati da 1 a 5 su 5

Discussione: [c] problema char

  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    3

    [c] problema char

    salve a tutti...sono nuovo del forum, da pochissimo programmo in C, ho sempre scritto programmi (semplici) in C++...ho un problema: ho scritto un programma che risolve un'equazione di secondo grado, alla fine del programma chiedo all'utente se vuole risolvere una nuova equazione o no...il problema sta proprio qui...vi scrivo il codice per farvi capire meglio:

    codice:
    int main()
    {
       char risp;
        
         do
         {
              /*CODICE PER RISOLVERE L'EQUAZIONE*/
              
              printf("\nVuoi risolvere un'altra equazione? s=si n=no\n");
              scanf("%c",&risp);
              do
              {
                if(risp!='n' && risp!='s')
                {
                    printf("\nError....\n");
    	        scanf("%c",&risp);
                }
              }
              while(risp != 'n' && risp != 's');
         }
         while(risp=='n');
         return 0;   
    }
    una volta lanciato il programma e risolta l'equazione mi stampa a video: "Vuoi risovere un'altra equazione? s=si n=no" e "Error..." e se premo un qualsiasi tasto esce dal programma...
    HELP!!!
    p.s. ho sempre programmato in C++ quindi è altamente probabile che stia confondendo la sintassi del C++ con quella del C o che abbia scritto una grossa cavolata che non ha senso?

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    475
    Innanzitutto questo codice è molto ridondante, potresti semplificarlo molto.

    In secondo luogo, è sbagliata la condizione del while più esterno: il ciclo continua a girare solo se l'utente risponde di no, il che è ovviamente il contrario di quello che vuoi.

    Terzo, dopo ogni risposta l'utente preme invio, inserendo quindi un newline nel buffer: se l'utente risponde n, al ciclo successivo la scanf legge un newline e il programma segnala un errore. Dovresti fare una fflush sullo stdin (se sei su windows, altrimenti cerca nel forum, si è parlato mille volte di una soluzione più portabile).

    codice:
    int main()
    {
       char risp;
        
         do
         {
              /*CODICE PER RISOLVERE L'EQUAZIONE*/
              
              printf("\nVuoi risolvere un'altra equazione? s=si n=no\n");
              scanf("%c",&risp);
              do
              {
                if(risp!='n' && risp!='s')
                {
                    printf("\nError....\n");
    	        scanf("%c",&risp);
                }
              }
              while(risp != 'n' && risp != 's');
         }
         while(risp == 's' );
         return 0;   
    }
    "Let him who has understanding reckon the number of the beast, for it is a human number.
    Its number is rw-rw-rw-."

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    3
    intanto grazie per la risposta...il codice l'avevo controllato molte volte...non mi ero accorto che la condizione dell'ultimo while era sbagliata... ora mi informo coma funziona la fflush...
    grazie mille!!!

  4. #4
    Originariamente inviato da ekoalon
    intanto grazie per la risposta...il codice l'avevo controllato molte volte...non mi ero accorto che la condizione dell'ultimo while era sbagliata... ora mi informo coma funziona la fflush...
    grazie mille!!!
    Ti semplifico la ricerca: http://www.cplusplus.com/reference/c...cstdio/fflush/


    Ciao

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    475
    In pratica, lo stdin è un file. Perciò quando ci digiti sopra con la tastiera, tutti i caratteri che digiti finiscono in questo file. Perciò se scrivi:

    codice:
     |c|\n|...
    e poi esegui una scanf chiedendo un solo carattere, verrà estratto un solo carattere.

    codice:
     |\n|...
    Al prossimo ciclo, richiedi un nuovo carattere, e verrà quindi estratto il newline.

    La fflush (che funziona solo su windows, ricorda) svuota il buffer di input, cancellando quindi il newline (e se non vado errato, tutto ciò che è stato scritto sullo stdin dopo il newline).
    "Let him who has understanding reckon the number of the beast, for it is a human number.
    Its number is rw-rw-rw-."

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.