Oppure

Loading
13/05/11 16:40
DarkFelix
Salve a tutti, sono novizio del linguaggio C, ma mi ci sto impegnando al massimo. Avevo provato a fare un programma, dalla consegna sul libro dove lo sto studiando, ma vedo che non funge a dovere, infatti sia rispondendo 'n' che 's' mi da la schermata che ho allegato, si trova in fondo alla pagina. Grazie a tutti ^^

#include <stdio.h>
#include <stdlib.h>
main()
{
    int punti;
    char x;
    char y;
    char v;
    char z;
    char w;
    char k;
    punti=0;
    printf("Benvenuto in questo test\n");
    printf("1a domanda, rispondi SI (s) o NO (n)\n");
    printf("2 + 2 x 2 = 8 ?\n");
    scanf("%c", &x);
    switch(x){
              case 'n': printf("Risposta esatta\n");
              punti=punti+1;
              printf("2a domanda, rispondi SI (s) o NO (n)\n");
              printf("Madrid e' la capitale della Spagna?\n");
              scanf("%c", &y);
              switch(y){
                        case 'n': printf("Risposta errata\n");
                        punti=punti-1;
                        printf("3a domanda, rispondi SI (s) o NO (n)\n");
                        printf("Un atomo di ossigeno e' formato da due molecole di Ossigeno?\n");
                        scanf("%c", &z);
                        switch(z){
                                  case 'n': printf("Risposta esatta\n");
                                  punti=punti+1;
                                  break;
                                  case 's': printf("Risposta errata\n");
                                  punti=punti-1;
                                  break;
                                  default: printf("Carattere non compreso\n");
                                  break;
                                  }
                        break;
                        case 's': printf("Risposta esatta\n");
                        punti=punti+1;
                        printf("3a domanda, rispondi SI (s) o NO (n)\n");
                        printf("Il toro e' il machio della mucca?\n");
                        scanf("%c", &v);
                        switch(v){
                                  case 'n': printf("Risposta errata\n");
                                  punti=punti-1;
                                  break;
                                  case 's': printf("Risposta esatta\n");
                                  punti=punti+1;
                                  break;
                                  default: printf("Carattere non compreso\n");
                                  break;
                                  }
                        break;
                        default: printf("Carattere non compreso\n");
                        break;
                        }
              break;
              case 's': printf("Risposta errata\n");
              punti=punti-1;
              printf("2a domanda, rispondi SI (s) o NO (n)\n");
              printf("Totti e' il capitano della Roma?\n"); 
              scanf("%c", &v);
              switch(v){
                        case 'n': printf("Risposta errata\n");
                        punti=punti-1;
                        printf("3a domanda, rispondi SI (s) o NO (n)\n");
                        printf("Mercurio ha atmosfera attorno a se'?\n");
                        scanf("%c", &w);
                        switch(w){
                                  case 'n': printf("Risposta esatta\n");
                                  punti=punti+1;
                                  break;
                                  case 's': printf("Risposta errata\n");
                                  punti=punti-1;
                                  break;
                                  default: printf("Carattere non compreso\n");
                                  break;
                                  }
                        break;
                        case 's': printf("Risposta esatta\n");
                        punti=punti+1;
                        printf("3a domanda, rispondi SI (s) o NO (n)\n");
                        printf("Gli anfibi sanno nuotare?\n");
                        scanf("%c", &k);
                        switch(k){
                                  case 'n': printf("Risposta errata\n");
                                  punti=punti-1;
                                  break;
                                  case 's': printf("Risposta esatta\n");
                                  punti=punti+1;
                                  break;
                                  default: printf("Carattere non compreso\n");
                                  break;
                                  }
                        break;
                        default: printf("Carattere non compreso\n");
                        break;
                        }
              break;
              default: printf("Carattere non compreso\n");
              }
    printf("Punteggio ottenuto: %d\n", punti);
    system("pause");
} 
Ultima modifica effettuata da DarkFelix 13/05/11 16:41
aaa
13/05/11 20:30
-tonix
Ciao, prima di ogni scanf inserisci questo codice fflush(stdin);

in questo modo:

printf("Totti e' il capitano della Roma?\n");
fflush(stdin);        
scanf("%c", &v);


in questo modo ti da la possibilità di rispondere a tutte le domande..
aaa
14/05/11 12:16
DarkFelix
Ok, grazie, ma... Potrei sapere qual è la sua funzione? Vorrei capire... ^^
aaa
14/05/11 14:01
-tonix
In pratica con il comando fflush(stdin); svuoti il buffer della tastiera.

Non conosco proprio la definizione precisa.. So però che spesso la scanf crea questo problema quindi è meglio usarlo prima di ogni scanf..

Mi è capitato che se avevo più scanf inserivo un valore alla prima e poi mi ripeteva quello stesso valore anche alla scanf successiva..

Quando ero agli inizi non sai quanto tempo ho perso dietro a questo tipo di errore :grr: xD
Ultima modifica effettuata da -tonix 14/05/11 14:04
aaa
15/05/11 7:12
DarkFelix
Ok, grazie dell'aiuto ^^

Si, infatti ora funge.

Si può chiudere.
aaa
15/05/11 10:32
Xaratroom
Postato originariamente da -tonix:

In pratica con il comando fflush(stdin); svuoti il buffer della tastiera.

Non conosco proprio la definizione precisa.. So però che spesso la scanf crea questo problema quindi è meglio usarlo prima di ogni scanf..

Mi è capitato che se avevo più scanf inserivo un valore alla prima e poi mi ripeteva quello stesso valore anche alla scanf successiva..

Quando ero agli inizi non sai quanto tempo ho perso dietro a questo tipo di errore :grr: xD

La scanf lascia il carattere di invio nello stdin se non è diversamente specificato nella stringa di formattazione.
aaa
15/05/11 22:54
R1C
bisogna prestare attenzione ad usare questa istruzione poiche' non funziona sempre "fflush(stdin)", nella generalita' si potrebbe usare getchar(); in modo tale da compiere lo stesso lavoro ovvero quello di svuotare il buffer sempre e comunque.
aaa
19/05/11 12:33
torn24
ciao , do un mio parere sul codice anche se il problema è stato risolto

usando switch annidati il codice diviene meno comprensibile
e si complicha la vita per nulla :pat:

semplici if else if else in sucessione
controlli se ' s '
controlli se 'n '
se il carattere non è valido else
per incrementare o decrementare una variabile
soluzione più semplice e logica :)
Ultima modifica effettuata da torn24 19/05/11 12:36
aaa