nikpez di nikpez
Ominide 738 punti

File di testo - Esercizio C

Si desidera realizzare un programma che calcoli il punteggio ottenuto da un esaminando in un quiz a risposte multiple. Il quiz contiene 20 domande, ognuna delle quali può avere la risposta A, B, C, D oppure E.
Al programma viene fornita la stringa delle risposte esatte (ossia le 20 lettere corrispondenti alle 20 risposte esatte).
Il programma deve quindi leggere dal file scheda.txt le risposte date da un esaminando.
Le risposte sono elencate una per riga.
Non è noto se le risposte (sia quelle esatte sia quelle fornite dall’esaminando) sono scritte con caratteri alfabetici maiuscoli o minuscoli. Il programma deve essere in grado di elaborare correttamente qualunque combinazione di maiuscole e minuscole. Si
garantisce che le risposte contengono solo caratteri leciti. Il programma deve fornire come risultato il punteggio conseguito dall’esaminando, calcolato secondo le seguenti regole:

• si aggiunge un punto per ogni risposta esatta
• si sottraggono 0.25 punti per ogni risposta sbagliata
Il punteggio ottenuto va scritto in un file di testo.

#include <stdio.h>
#include <ctype.h>
#include <string.h>
#define MAX_RISPOSTE 20
#define PRE 1.0 // Punti per Risposta Esatta
#define PRS -0.25 // Punti per Risposta Sbagliata
int main ()
{
char risposta[2];
char risposteEsatte[MAX_RISPOSTE+1];
FILE *fpScheda, *fpRisultati;
double punteggio = 0.0;
int i;
//printf("Digita la stringa contenente le risposte corrette\n");
//gets(risposteEsatte);
//fflush(stdin);
strcpy(risposteEsatte,"AAABACcCcCDDDDDaBaBB"); //per test
strupr(risposteEsatte); //conversione in maiuscolo delle risposte esatte
/* apertura e controllo del file di input */
fpScheda = fopen ("scheda.txt", "rt");
if (fpScheda == NULL)
{
printf("Errore: impossibile aprire il file in lettura\n");
getchar();
exit(1);
}
/* lettura dei dati */
i = 0;
while (fscanf(fpScheda,"%s",risposta) != EOF)
{
/* la risposta data e' in risposta[0] */
if (toupper(risposta[0]) == risposteEsatte)
punteggio += PRE;
else
punteggio += PRS;
i++;
}
/* chiusura del file */
fclose(fpScheda);
/* stampa del risultato */
//printf ("Punti conseguiti: %f\n", punteggio); //per test
/* apertura e controllo del file di output */
fpRisultati = fopen ("risultati.txt", "wt");

if (fpRisultati == NULL)
{
printf("Errore: impossibile aprire il file in scrittura\n");
getchar();
exit(2);
}
fprintf (fpRisultati,"%f\n", punteggio);
fclose(fpRisultati);
getchar();
return 0;
}

Registrati via email