Salve, sono alle prese con la preparazione dell'esame di Informatica e ieri mi sono imbattuto in un esercizio sui file che mi sta dando problemi.
Al momento della compilazione mi da alcuni errori, tra cuicodice:#include <stdio.h>#include <stdlib.h> #include <string.h> #define R 80 #define N 20 #define P 4 int main(int argc, char *argv[]) { if(argc!=2) { printf("ERROR"); return -1; } struct corso { char materia[N]; char nome[N]; char cognome[N]; int periodo; int crediti; int superamento; }; struct corso insegnamenti[R]; FILE *f; int i = 0, j, k = 0; int creditimax = 0; int superamentomin[R]; int somcrediti = 0; float mediasuperamenti = 0; char riga[R]; char matcreditimax[R]; char matsupmin[P][R]; char insegnante[N]; for(j=0; j<R; j++) { superamentomin[i] = 100; } f = fopen(argv[1], "r"); if(fopen(argv[1], "r")==NULL) { printf("ERROR"); return -1; } while(fgets(riga, R, f)!=NULL) { fscanf(f,"%s %s %s %d %d %d", insegnamenti[i].materia, insegnamenti[i].nome, insegnamenti[i].cognome, &insegnamenti[i].periodo, &insegnamenti[i].crediti, &insegnamenti[i].superamento); if(insegnamenti[i].crediti>creditimax) { creditimax = insegnamenti[i].crediti; strcpy(matcreditimax, insegnamenti[i].materia); i++; } } for(j=0; j<i; j++) { switch(insegnamenti[j].periodo) { case 1: if(insegnamenti[j].superamento<superamentomin[j]) { superamentomin[j] = insegnamenti[j].superamento; strcpy(matsupmin, insegnamenti[j].materia); } break; case 2: if(insegnamenti[j].superamento<superamentomin[j]) { superamentomin[j] = insegnamenti[j].superamento; strcpy(matsupmin, insegnamenti[j].materia); } break; case 3: if(insegnamenti[j].superamento<superamentomin[j]) { superamentomin[j] = insegnamenti[j].superamento; strcpy(matsupmin, insegnamenti[j].materia); } break; case 4: if(insegnamenti[j].superamento<superamentomin[j]) { superamentomin[j] = insegnamenti[j].superamento; strcpy(matsupmin, insegnamenti[j].materia); } break; default: break; } } printf("La materia con piu' crediti associati e' %s con %d crediti.\n", matcreditimax, creditimax); for(j=0; j<i; j++) { printf("Periodo %d - Materia piu' difficile da superare: %s - Superamento esame %d %.\n", i, matsupmin[i], superamentomin[i]); } printf("Inserire cognome professore ricercato: "); scanf("%s", insegnante); for(j=0; j<i; j++) { if(strcmp(insegnante, insegnamenti[i].cognome)==0) { somcrediti = somcrediti + insegnamenti[i].crediti; mediasuperamenti = mediasuperamenti + insegnamenti[i].superamento; k++; } } mediasuperamenti = (float) mediasuperamenti/k; printf("L'insegnante ricercato segue corsi per un totale di %d crediti e con una media superamento di %f %.", somcrediti, mediasuperamenti); fclose(f); if(fclose(f)==NULL) { printf("ERROR"); return -1; } return 0; }
"c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.6. 1\..\..\..\..\include\string.h|45|note: expected 'char *' but argument is of type 'char (*)[80]'|"
e il warning
"C:\Users\dying_000\Desktop\Polito Informatica\Laboratorio\Settimana 11\Settimana11_Es1\main.c|76|warning: passing argument 1 of 'strcpy' from incompatible pointer type [enabled by default]|"
Tutto questo per i strcpy utilizzati nello switch. Sapresti spiegarmi a cosa può essere dovuto l'errore?

Rispondi quotando