|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Dec 2005
Messaggi: 1345
|
[C]Come passare la struct ad una funzione
Salve ragazzi ho un problema con l'uso dello struct in quanto sono alle prime armi.
siccome vorrei creare per esercizio un programmino di gestione della libreria,ho pensato di implementare tutto nello struct e poi di usare le funzioni per trattare i dati. un frammento di codice è questo precisanto che libreria[] è un array di struct che contiene libri Codice:
typedef struct libri { char n_libro[MAX]; char n_autore[MAX]; int prezzo; } Biblio; void ins_dati (int i,int riemp,Biblio libreria[]); grazie in anticipo per le risposte... |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2773
|
Forse non ho capito bene il problema. Se nella funzione chiamante hai un array, chiamiamolo arr, puoi passarlo alla funzione che hai scritto semplicemente passando arr (senza [], & e amenità varie)
|
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Dec 2005
Messaggi: 1345
|
in pratica quando ho un array di int o char ecc.. vado tranquillo inserendo nell'intestazione della funzione
Codice:
void esemp (int vett[]){ ...} Codice:
esemp (vett); Codice:
int main () { Biblio libreria[MAX]; ... Codice:
void esempio (int riemp, biblio libreria []){ //corpo della funzione } Quindi come posso far capire al programma che deve prendere l'array di struct ![]() |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Dec 2005
Messaggi: 1345
|
ho scritto velocemente
![]() ![]() |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2773
|
Probabilmente o hai sbagliato a scrivere qualcosa oppure hai sbagliato l'ordine delle dichiarazioni (magari hai messo la definizione della struttura dopo l'intestazione della funzione).
Ti posto un esempio che compila: Codice:
#include<stdio.h> #define MAX 100 typedef struct libri { char n_libro[MAX]; char n_autore[MAX]; int prezzo; } Biblio; void ins_dati (int i,int riemp,Biblio libreria[]); int main(char **argv, int argc){ Biblio vett[100]; ins_dati(1,1,vett); return 0; } void ins_dati (int i,int riemp,Biblio libreria[]){ } |
![]() |
![]() |
![]() |
#6 | |
Senior Member
Iscritto dal: Dec 2005
Messaggi: 1345
|
Quote:
Codice:
int main(char **argv, int argc) (p.s. le funzioni si trovano nelle posizioni sono giuste) Cosa significano quelle scritte? e quando si mettono? grazie mille per la risposta ![]() |
|
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Sep 2005
Messaggi: 1400
|
perdonatemi è vero che sono un po' arruginito con il c, ma se l'intento è quello di popolare un array di struct (Biblioteca) per fa si che la variabile a fine funzione contenga i valori elaborati da ins_dati non è necessario passarla per riferimento?
|
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Sep 2005
Messaggi: 1400
|
avrò letto troppo di fretta
![]() |
![]() |
![]() |
![]() |
#9 | |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2773
|
Quote:
|
|
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: Dec 2005
Messaggi: 1345
|
Allora, adesso vi posto l'intero progetto.
header: Codice:
#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX 200 typedef struct libri { char n_libro[MAX]; char n_autore[MAX]; int prezzo; } Biblio; void ins_dati (int i,int riemp,Biblio libreria[]); void lett_dati (int i,int riemp,Biblio libreria[]); Codice:
#include "header.h" int main () { Biblio libreria[MAX]; //genero la tabella facendo un'array di strutture int i,riemp; //intestazione printf("Programma gestione Libri della biblioteca\n\n"); ins_dati (i,riemp,libreria); lett_dati ( i, riemp, libreria); system("pause"); return 0; } Codice:
//inserimento dati void ins_dati (int i, int riemp, Biblio libreria []){ printf("\nIndicare il numero di dati da aggiungere: "); scanf("%d",&riemp); for(i=0;i<riemp;i++){ printf("\nIn pos %d inserire il titolo del libro: ",i+1); scanf("%s", &libreria[i].n_libro); printf("\nIn pos %d inserire il nome dell'autore: ",i+1); scanf("%s", &libreria[i].n_autore); printf("\nIn pos %d inserire il prezzo del libro: ",i+1); scanf("%d", &libreria[i].prezzo); } } //lettura a video dei dati void lett_dati (int i,int riemp, Biblio libreria []){ for(i=0;i<riemp;i++){ printf("\nIn pos %d, il titolo del libro e': %s ",i+1,libreria[i].n_libro); printf("\nIn pos %d, il nome dell'autore e': %s",i+1,libreria[i].n_autore); printf("\nIn pos %d, il prezzo del libro e': %d\n",i+1,libreria[i].prezzo); } } |
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Dec 2005
Messaggi: 558
|
Nel programma che hai postato ci sono diversi errori di concetto. Conviene che prima capisci bene la differenza tra il passare variabili per valore e per riferimento. Se tu definisci una funzione in questa maniera:
Codice:
void ins_dati (int i,int riemp,Biblio libreria[]); Ultima modifica di Torav : 10-01-2010 alle 11:00. |
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2773
|
Oltre agli errori concettuali segnalati da Torav aggiungo che il file in cui hai inserito le funzioni non conosce la struttura Biblio perché non hai incluso l'header. Per questo ottieni un errore in compilazione
|
![]() |
![]() |
![]() |
#13 |
Senior Member
Iscritto dal: Dec 2005
Messaggi: 1345
|
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 21:02.