Ciao a tutti!
mi scuso se posto una domanda già fatta, ma pur leggendo gli altri topic non riesco a trovare soluzione!
Sto scrivendo un programma in C per l'università: è una specie di quiz, il codice è il seguente
codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define MAX_TITLE_LEN 40
#define MAX_Q_LEN 300
#define MAX_A_LEN 30
#define DEBUG
int punteggio = 0;
void stampa_domande (char[], FILE*, FILE*);
void acquisisci_risposta (FILE*);
void score (void);
int main () {
int i;
char titolo[MAX_TITLE_LEN + 1], password[MAX_TITLE_LEN + 1];
char percorso_d[MAX_TITLE_LEN + 1], percorso_r[MAX_TITLE_LEN + 1], percorso_p[MAX_TITLE_LEN + 1];
char domanda[MAX_Q_LEN + 1];
char scelta;
FILE *d, *r, *p;
printf ("Benvenuto!\n");
printf ("Inserisci il titolo del film di cui vuoi le domande: ");
gets (titolo);
do {
for (i = 0; titolo[i] != '\0'; i++) {
titolo[i] = tolower (titolo[i]);
if (titolo[i] == ' ')
titolo[i] = '-';
}
strcpy (percorso_d, titolo);
strcpy (percorso_r, titolo);
strcpy (percorso_p, titolo);
strcat (percorso_d,"/domande.txt");
strcat (percorso_r, "/risposte.txt");
strcat (percorso_p, "/password.txt");
d = fopen (percorso_d, "r");
r = fopen (percorso_r, "r");
if (d == NULL) {
printf ("Non ho trovato il file\n");
return 0;
}
else
printf ("%s: ho aperto i file.\n", titolo);
while(fgets (domanda, MAX_Q_LEN, d) != NULL)
stampa_domande (domanda, d, r);
printf ("Hai totalizzato %d punti.\n", punteggio);
if (punteggio == 40 || punteggio > 40) {
p = fopen (percorso_p, "r");
fscanf (p, "%s", password);
fclose (p);
printf ("Complimenti!! Livello superato!\nLa Password per aprire l'archivio corrispondente a %s è %s\n", titolo, password);
}
else {
printf ("Peccato! Livello fallito!\n");
fclose (d);
}
printf ("Un'altra partita? (y, n) ");
scanf ("%c", &scelta);
if (scelta == 'y') {
printf ("Inserisci il titolo del film di cui vuoi le domande: ");
gets (titolo);
#if defined (DEBUG)
printf ("new_title: %s\n", titolo);
#endif
}
} while (scelta != 'n');
return 0;
}
void stampa_domande (char domanda[], FILE *d, FILE *r) {
printf ("%s ", domanda);
acquisisci_risposta (r);
return;
}
void acquisisci_risposta (FILE *r) {
char risp_es[MAX_A_LEN + 1], risposta[MAX_A_LEN + 1];
int check;
gets (risposta);
fscanf (r, "%s", risp_es);
check = strcmp (risp_es, risposta);
if (check == 0) {
punteggio += 10;
return;
}
else
return;
}
in pratica all'inizio del runtime l'utente specifica il nome di un film (di cui sono state caricate domande e risposte), il programma fa delle domande e l'utente risponde con risposte aperte oppure vero/falso.
tutto ok, se non fosse che quando arrivo per la prima volta all'inizio del main e mi chiede "un'altra partita?" io faccio "y" e lui, saltando completamente la gets (titolo) in fondo termina il programma perchè non mi fa dire su quale altro film voglio essere interrogato.
Cosa devo fare???