Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    [C] Errore compilazione funzione strcpy

    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.

    codice:
    #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;
    }
    Al momento della compilazione mi da alcuni errori, tra cui
    "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?

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Nel caso di

    matcreditimax

    va bene perché è un array di char, infatti

    char matcreditimax[R];

    ma per

    matsupmin no perché è una matrice a due dimensioni

    char matsupmin[P][R];

    quindi devi indicare nella strcpy a quale elemento della matrice fai riferimento
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.