Problema con piccolo programma

di il
2 risposte

Problema con piccolo programma

Buona sera a tutti
ho un piccolo problema con un banale problema in un sorgente c

riporto il codice:
/*Domande variee*/

#include<stdio.h>

char x;
int i = 0, punt;

main()
{
      printf("\tRispondi s o n alle domande per si o no:\n");
      
      printf("1)Napoleone è morto il 5 maggio 1821?\n");
      scanf("%c",&x);
   if(x == 's' || x == 'n')
    {
      switch(x) {
      case 's':
      {
         printf("Giusto!\n");
         i = 1;
         punt = punt +i;
         break;
      }
      case 'n':
      printf("Errato\n");
      break;
      }
    }
    else
      printf("Immissione non valida\n");
     
      
     
      printf("2)la seconda guerra mondiale è finita nel 1946?\n");
        scanf("%c",&x);
  if(x == 's' || x == 'n')
    {
      switch(x) {
      case 'n':
      {
         printf("Giusto!\n");
         i = 1;
         punt = punt +i;
         break;
      }
      case 's':
      printf("Errato\n");
      break;
      }
    }
    else
      printf("Immissione non valida\n");
     
      
      printf("3)Il muro di Berlino è caduto nel 1989\n");
       scanf("%c",&x);
  if(x == 's' || x == 'n')
    {
      switch(x) {
      case 's':
      {
         printf("Giusto!\n");
         i = 1;
         punt = punt +i;
         break;
      }
      case 'n':
      printf("Errato\n");
      break;
      }
    }
    else
      printf("Immissione non valida\n");
      
      
      printf("hai ottenuto %d di punteggio\n",punt);
      
      system("pause");
}

quando compilo tutto ok(dev C++) ma nell esecuzione la seconda domanda viene comunque eseguita senza linput utente.
Mi scuso in anticipo con tutti e premetto che ho pochissima esperienza. grazie

2 Risposte

  • Re: Problema con piccolo programma

    Ciao giovdigua,
    quando inserisci la risposta scrivi 's' e poi batti enter, nel buffer di lettura quindi ci sono due caratteri il carattere 's' e il carattere a capo '\n'.

    La prima scanf("%c",&x) legge 's' e lascia nel buffer '\n', la successiva scanf lo trova nel buffer e lo legge.

    Una soluzione sarebbe di leggere esplicitamente il carattere si a capo scrivendo la seconda scanf in questo modo:
    
    scanf("\n%c",&x);
    
    oppure prima della scanf puoi scrivere:
    
    flushall();
    scanf("%c",&x);
    
    oppure:
    
    fflush(stdin);
    scanf("%c",&x);
    
    sono sistemi equivalenti, ne esistono altri, ma a questo punto credo che il problema sia chiaro.
  • Re: Problema con piccolo programma

    Puoi risolvere come ti ha risposto quello sopra di me, oppure più semplicemente dopo ogni chiamata alla scanf scrivi getchar();
    in questo modo il carattere '\n' rimasto nel buffer viene "consumato" da getchar();
Devi accedere o registrarti per scrivere nel forum
2 risposte