Buongiorno, avrei bisogno del vostro aiuto per l'esecuzione di questo programma. Il testo è il seguente:
"Si scriva un programma in linguaggio C che legga il contenuto di un file
dopo averne ricevuto il nome da linea di comando. Il numero di righe del
file sia al massimo 80 e ciascuna riga del file contenga i seguenti campi,
ciascuno composto al massimo da 20 caratteri e privo di spazi
<materia> <nome prof> <cognome prof> <periodo> <crediti> <% superamento esame>
Il programma dovrà stampare a video:
a. il nome della materia che assegna più crediti in assoluto
b. per ciascun periodo didattico (considerandone al massimo 4), la
materia più difficile da superare
Il programma dovrà infine richiedere l’inserimento da tastiera di un
cognome di professore (massimo 20 caratteri) e stampare a video:
c. la somma dei crediti assegnati dalle materie che insegna
d. la media di superamento degli esami da lui tenuti."
Il codice da me realizzato è il seguente:
Non riesco a capire perchè non funzioni, ho messo il file di testo da me creato nella cartella del programma quindi dovrebbe essere tutto a posto, ma non riesco proprio a capire cosa non vada. Qualcosa di errato nella linea da comando? Qualcuno mi aiuta? GRAZIE!!!
"Si scriva un programma in linguaggio C che legga il contenuto di un file
dopo averne ricevuto il nome da linea di comando. Il numero di righe del
file sia al massimo 80 e ciascuna riga del file contenga i seguenti campi,
ciascuno composto al massimo da 20 caratteri e privo di spazi
<materia> <nome prof> <cognome prof> <periodo> <crediti> <% superamento esame>
Il programma dovrà stampare a video:
a. il nome della materia che assegna più crediti in assoluto
b. per ciascun periodo didattico (considerandone al massimo 4), la
materia più difficile da superare
Il programma dovrà infine richiedere l’inserimento da tastiera di un
cognome di professore (massimo 20 caratteri) e stampare a video:
c. la somma dei crediti assegnati dalle materie che insegna
d. la media di superamento degli esami da lui tenuti."
Il codice da me realizzato è il seguente:
Codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 20
int main(int argc, char* argv[])
{
FILE* fp;
char mostcredits[N];
char mostdifficult[4][N];
char professore[N];
int sommacreditiprof;
float mediaprof=0;
char stringa;
float minsup1, minsup2, minsup3, minsup4;
int maxcrediti;
int numesami=0;
int i;
typedef struct professore
{
char nomeprof[N];
char cognomeprof[N];
char materia[N];
int crediti;
float sup;
int periodo;
} Professore;
Professore prof[80];
int righe;
if(argc!=2)
return -1;
if((fopen(argv[1], "r"))==NULL)
printf("Errore nell'apertura!\n");
else
{
i=0;
{
sscanf(stringa, "%s %s %s %d %d %f", prof[i].materia, prof[i].nomeprof, prof[i].cognomeprof, &prof[i].periodo, &prof[i].crediti, &prof[i].sup);
i++;
}
while((fgets(stringa, 86, fp))!=NULL);
righe=i;
maxcrediti=prof[0].crediti;
minsup1=100;
minsup2=100;
minsup3=100;
minsup4=100;
for(i=1; i<righe; i++)
{
if(prof[i].crediti>maxcrediti)
{
strcpy(mostcredits, prof[0].materia);
maxcrediti=prof[i].crediti;
}
switch(prof[i].periodo)
{
case 1:
{
if(minsup1>prof[i].sup)
{
strcpy(mostdifficult[0], prof[i].materia);
minsup1=prof[i].sup;
}
}
break;
case 2:
{
if(minsup2>prof[i].sup)
{
strcpy(mostdifficult[1], prof[i].materia);
minsup2=prof[i].sup;
}
}
break;
case 3:
{
if(minsup3>prof[i].sup)
{
strcpy(mostdifficult[2], prof[i].materia);
minsup1=prof[i].sup;
}
}
break;
case 4:
{
if(minsup4>prof[i].sup)
{
strcpy(mostdifficult[3], prof[i].materia);
minsup4=prof[i].sup;
}
}
break;
}
}
printf("Materia con il max numero di crediti: %s\n", mostcredits);
for(i=0; i<4; i++)
{
printf("Materia piu' difficile da superare del %d periodo: %s\n", i, mostdifficult[i]);
}
}
printf("Inserisci il cognome di un professore:\n");
scanf("%s", professore);
for(i=0; i<righe; i++)
{
if((strcmp(professore, prof[i].cognomeprof))==0)
{
sommacreditiprof=sommacreditiprof + prof[i].crediti;
numesami++;
mediaprof=mediaprof+((prof[i].sup)/numesami);
}
}
printf("Crediti del professore: %d\n", sommacreditiprof);
printf("Media superamento prof: %f\n", mediaprof);
fclose(fp);
return 0;
}
Non riesco a capire perchè non funzioni, ho messo il file di testo da me creato nella cartella del programma quindi dovrebbe essere tutto a posto, ma non riesco proprio a capire cosa non vada. Qualcosa di errato nella linea da comando? Qualcuno mi aiuta? GRAZIE!!!