Errore gestione stringhe

di il
2 risposte

Errore gestione stringhe

Buongiorno, sono alle prese con degli esercizi del mio corso di università. Ho provato a cercare diverse soluzioni ma niente da fare.
lascio sotto il testo del esercizio con il mio codice. Gli errori si generano sempre in corrispondenza di funzioni come strcmp o strcpy.
Grazie in anticipo a chi riesce a darmi una mano.
Mi scuso già per eventuali mie oscenità ma non sono molto pratico
Si scriva un programma in linguaggio C che permette all'utente di inserire delle parole (stringhe) in un opportuno vettore di stringhe (matrice di char) senza ripetizioni.

Il main dopo aver chiesto all'utente di inserire una parola da tastiera la inserisce in coda al vettore tramite una funzione "inserimento".
La funzione "inserimento" prende come parametri il vettore di stringhe, la parola da inserire ed eventuali altri parametri:
- restituisce 0 se la stringa è già presente nel vettore;
- altrimenti procede ad inserire la nuova parola e restituisce 1.

Il programma deve continuare a richiedere l'inserimento di nuove parole finché l'utente non inserisce la parola "fine" (che non va inserita nel vettore).
Al termine dell'inserimento il programma deve stampare a video l'intero vettore di stringhe tramite una procedura.

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>

typedef struct {
    char s[20];
    int voto;
}votazione;

void lettura_votazioni(votazione V[], int* N_votazioni) {
    const int N_elementi = 22;
    int i;
    votazione accampamenti[] = {
        {"Odisseo", 4},
        {"Achille", 3},
        {"Menelao", 2},
        {"Odisseo", 2},
        {"Agamennone", 5},
        {"Menelao", 2},
        {"Tersite", 1},
        {"AiaceTelamonio", 5},
        {"AiaceTelamonio", 2},
        {"Diomede", 4},
        {"AiaceOileo", 2},
        {"Agamennone", 3},
        {"Achille", 5},
        {"AiaceOileo", 2},
        {"Odisseo", 3},
        {"Achille", 5},
        {"Agamennone", 2},
        {"Menelao", 2},
        {"Diomede", 3},
        {"AiaceTelamonio", 2},
        {"Diomede", 2},
        {"AiaceOileo", 2}
    };
    for (i = 0; i < N_elementi; i++)
        V[i] = accampamenti[i];
    (*N_votazioni) = N_elementi;
}

void inserimento(votazione a[], votazione b[], int dim, int *dim2) {
    int index;
    for (int i = 0; i < dim; i++) {
        index = ricerca(a[i].s, &b, &dim);
        if (index == (-1)) {
            strcpy(b[*dim2].s,a[i].s);
            b[*dim2].voto = a[i].voto;
            (*dim2)++;
        }
        else {
            int temp = a[i].voto;
            int temp2 = b[index].voto;
            int sum = temp + temp2;
            b[index].voto = sum;
        }
    }
}
int ricerca(char s[], votazione b[], int dim) {
    for (int i = 0; i < dim; i++) {
        if (!strcmp(s, b[i].s)){
            return i;
        }
    }
    return -1;
}
void stampa(votazione b[], int dim) {
    for (int i = 0; i < dim; i++) {
        printf("\n%s , Voti: %d", b[i].s, b[i].voto);
    }
}

void main()
{
    votazione a[100], b[100];
    int dim, dim2 = 0;
    lettura_votazioni(&a, &dim);
    inserimento(&a, &b, &dim, &dim2);
    stampa(&b, &dim2);
}

2 Risposte

  • Re: Errore gestione stringhe

    Leggi il regolamento usa I tag code per il codice o non si capisce nulla
  • Re: Errore gestione stringhe

    Beh gli errori del compilatore sono abbastanza chiari. Riguardano tutti le chiamate a funzioni.
    Non puoi chiamare funzioni prima di averle dichiarate. Un modo per evitare il problema è fare prima tutte le dichiarazioni e poi le definizioni.
    Gli array si passano alle funzioni senza la e commerciale, basta il nome.
    Il resto riguarda sempre i passaggi di parametri, hai confuso variabili con puntatori.
Devi accedere o registrarti per scrivere nel forum
2 risposte