Utilizzo di typedef struct

di il
4 risposte

Utilizzo di typedef struct

Buongiorno a tutti, ho difficoltà nel utilizzare le strutture. Vi allego il codice che ho fatto. Volevo sapere come andare a compilare ogni campo della struttura che ho dichiarato utilizzando un ciclo for e anche per stampare tutto ciò. Non so se mi sono spiegato bene.
Vi ringrazio anticipatamente
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 5

typedef struct libro
{
	char autore[60];
	char editore[50];
	char categoria[20];
	int anno;
	float prezzo;
} libro;

int main(void)
{
	int cont1;
	int cont2;
	libro raccolta[MAX];
	for(cont1=0;cont1<MAX;cont1++)
	{
	printf("Inserisci l'autore del libro:\n");
	scanf("%s",raccolta[cont1].autore);
	printf("Inserisci l'editore del libro:\n");
	scanf("%s",raccolta[cont1].editore);
	printf("Inserisci la categoria del libro:\n");
	scanf("%s",raccolta[cont1].categoria);
	printf("Inserisci l'anno di pubblicazione del libro:\n");
	scanf("%d",raccolta[cont1].anno);
	printf("Inserisci il prezzo del libro:\n");
	scanf("%f",raccolta[cont1].prezzo);
	}
	for(cont2=0;cont2<MAX;cont2++){
	printf("",raccolta[cont2]);
	}
return 0;

}

4 Risposte

  • Re: Utilizzo di typedef struct

    Occhio che qui manca il &

    scanf("%d", &raccolta[cont1].anno);

    scanf("%f", &raccolta[cont1].prezzo);

    Qui devi indicare tutti i campi

    printf("%s\n",raccolta[cont2].autore);

    e così via
  • Re: Utilizzo di typedef struct

    Che stupido mi ero dimenticato la cosa più importante (&) comunque ho apportato le modifiche che mi hai suggerito ma compilando il programma mi porta 3 warning. Dice che devo usare i puntatori per autore editore e categoria.
    Ti allego codice e warning.
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define MAX 5
    
    typedef struct libro
    {
    	char autore[50];
    	char editore[60];
    	char categoria[10];
    	int anno;
    	float prezzo;
    } libro;
    
    int main(void)
    {
    	int cont1;
    	int cont2;
    	libro raccolta[MAX];
    	for(cont1=0;cont1<MAX;cont1++)
    	{
    	printf("Inserisci l'autore del libro:\n");
    	scanf("%s",&raccolta[cont1].autore);
    	printf("Inserisci l'editore del libro:\n");
    	scanf("%s",&raccolta[cont1].editore);
    	printf("Inserisci la categoria del libro:\n");
    	scanf("%s",&raccolta[cont1].categoria);
    	printf("Inserisci l'anno di pubblicazione del libro:\n");
    	scanf("%d",&raccolta[cont1].anno);
    	printf("Inserisci il prezzo del libro:\n");
    	scanf("%f",&raccolta[cont1].prezzo);
    	}
    	for(cont2=0;cont2<MAX;cont2++){
    	printf("L'autore del %d° libro è:%s\n",cont2,raccolta[cont2].autore);
    	printf("L'editore del %d° libro è:%s\n",cont2,raccolta[cont1].editore);
    	printf("La categoria del %d° libro è:%s\n",cont2,raccolta[cont1].categoria);
    	printf("L'anno di pubblicazione del %d° libro è:%d\n",cont2,raccolta[cont1].anno);
    	printf("Il prezzo del %d° libro è:%f\n",cont2,raccolta[cont1].prezzo);
    	}
    return 0;
    
    }
    WARNING:
    Programma23.c: In function ‘main’:
    Programma23.c:23:10: warning: format ‘%s’ expects argument of type ‘char ’, but argument 2 has type ‘char ()[50]’ [-Wformat=]
    scanf("%s",&raccolta[cont1].autore);
    ^ ~~~~~~~~
    Programma23.c:25:10: warning: format ‘%s’ expects argument of type ‘char ’, but argument 2 has type ‘char ()[60]’ [-Wformat=]
    scanf("%s",&raccolta[cont1].editore);
    ^ ~~~~~~~~~
    Programma23.c:27:10: warning: format ‘%s’ expects argument of type ‘char ’, but argument 2 has type ‘char ()[10]’ [-Wformat=]
    scanf("%s",&raccolta[cont1].categoria);
  • Re: Utilizzo di typedef struct

    Per le stringhe NON devi usare & perché sono già degli indirizzi. Infatti ti avevo dato solo due righe da correggere, non tutte
  • Re: Utilizzo di typedef struct

    Perfetto,Grazie mille
Devi accedere o registrarti per scrivere nel forum
4 risposte