[C]Primo esercizio sull'allocazione dinamica della memoria, consiglio

di il
3 risposte

[C]Primo esercizio sull'allocazione dinamica della memoria, consiglio

Ragazzi avrei bisogno di un aiuto gentilmente perchè sto un po' impazzendo.
Dato il seguente codice

#include <stdlib.h>
typedef struct studenti
{
char *nome;
int eta;
char *corso;
};

void costruisciarray (void);

int i;
struct studenti example[i];

int main()
{
	printf ("Welcome to the 'array construction example'. Please enter your array size:\n");
	scanf ("%d", &i);
    costruisciarray();

}

void costruisciarray()
{
	int i;
	for (int c=1; c<=i; c++)
	{
		example[c].nome=(char *)malloc(200*sizeof(char));
		printf("Inserisci il nome\n");
		scanf("%s", example[c].nome);
		printf ("Inserisci eta'\n");
		scanf("%d", &example[c].eta);
		example[c].corso=(char *)malloc(200*sizeof(char));
		printf("Inserisci il corso\n");
		scanf("%s", example[c].corso);
	}
	printf("Enjoy your array\n");
	return 0;
}
Vorrei sapere perchè non compila proprio, tralasciando se sia corretto utilizzare variabili globali, indicizzare array per la struttura ecc...
Grazie mille in anticipo, dannata università

3 Risposte

  • Re: [C]Primo esercizio sull'allocazione dinamica della memoria, consiglio

    Questa

    struct studenti example;

    non ha senso dato che i non ha ancora un valore valido. Usa una costante al posto di i

    Poi, la

    return 0;

    nella funzione costruisciarray non va dato che la funzione è void

    E sempre nella stessa funzione, nella for

    for (int c=1; c<=i; c++)

    utilizzi i che non ha un valore valido.

    Sono TUTTI errori che il compilatore ti fornisce. Basta leggerli.
  • Re: [C]Primo esercizio sull'allocazione dinamica della memoria, consiglio

    Si il problema di fondo era che mi dava errore per l'int dichiarato all'interno del for, ai compilatori dell'uni non si poteva farlo.
    Dovete scusarmi ma ho un'ultima domanda. Perchè nella funzione stampa del seguente codice di esempio mi da "NULL"?
    #include <stdio.h>
    #include <stdlib.h>
    typedef struct studenti
    {
    char *nome;
    int eta;
    char *corso;
    };
    
    void costruisciarray (struct studenti *ps);
    void stamparray (struct studenti *pm);
    int i;
    
    int main()
    {
    	printf ("Welcome to the 'array construction example'. Please enter your array size:\n");
    	scanf ("%d", &i);
    	struct studenti example[i];
        costruisciarray(example);
        stamparray(example);
    
    }
    
    void costruisciarray(struct studenti *example)
    {
    	int c;
    	for (c=1; c<=i; c++)
    	{
    		example[c].nome=(char *)malloc(200*sizeof(char));
    		printf("Inserisci il nome\n");
    		scanf("%s", example[c].nome);
    		printf ("Inserisci eta'\n");
    		scanf("%d", &example[c].eta);
    		example[c].corso=(char *)malloc(200*sizeof(char));
    		printf("Inserisci il corso\n");
    		scanf("%s", example[c].corso);
    	}
    	printf("Enjoy your array\n");
    }
    
    void stamparray (struct studenti *pm)
    {
    	int x;
    	for (x=1; x<=i; x++)
    	{
    		printf("Il nome e' %s\n", pm[x].nome);
    	}
    }
    Grazie mille nuovamente ragazzi
  • Re: [C]Primo esercizio sull'allocazione dinamica della memoria, consiglio

    Non da 1 a i ...

    In C i vettori partono da 0 fino a n-1 ... quindi devi scrivere SEMPRE

    for (int c=0; c<i; c++)

    for (x=0; x<i; x++)
Devi accedere o registrarti per scrivere nel forum
3 risposte