Newsgroup: it.comp.lang.c
Titolo: [NEWBIE] Passare array a funzioni

Ciao NG,
Mi sto avvicinando alla programmazione C da qualche giorno. Per studio
personale sto provando a fare un programmino che mi crea un mazzo di carte
napoletane. Ho utilizzato le seguenti istruzioni:
#include <stdio.h>
/* Definisco una struttura di tipo CARTA */
struct carta
       {
       int valore;
       char *seme;
       };
typedef struct carta CARTA;
/* Prototipi */
void crea_napoletane(CARTA *[]);
int main()
{
/* Assegno ad un array il nuovo tipo appena creato */
CARTA mazzetto[40];
/* Chiamo la funzione che mi crea il mazzetto di carte napoletane */
 void crea_napoletane(CARTA *mazzetto[]);
}
/* Function che crea il mazzetto di carte napoletane.
Riceve in input un array vuoto di tipo carta e restituisce
in output lo stesso mazzetto riempito con tutti i semi e i valori
del mazzetto di carte napoletane */
void crea_napoletane(CARTA *napoletane[])
/* Definisco un array dei quattro semi del mazzo di carte napoletane */
char *tutti_semi[4]={"Denari","Coppe","Bastoni","Spade"};
int i; /* Indice del mazzetto */
int v; /* Indice del valore */
int s; /* Indice del seme */
/* Creo il mazzetto di carte napoletane */
v=1;
s=0;
for (i=0;i<=39;i++)
    {
    if (v > 10)
        {
        v=1;
        s++;
        }
    *napoletane[i].valore=v;
    *napoletane[i].seme=tutti_semi[s];
    v=v++;
    }
Solo che quando vado a compilare mi restituisce i seguenti errori:
Building Makefile: "C:\Documents and
Settings\Administrator\Desktop\mano_scopa\Makefile.win"
Esecuzione di  make...
make.exe all -f "C:\Documents and
Settings\Administrator\Desktop\mano_scopa\Makefile.win"
gcc.exe -c main.c -o main.o -I"C:\Dev-C++\include"   -s
main.c: In function `crea_napoletane':
main.c:110: parameter `tutti_semi' is initialized
main.c:110: warning: initialization from incompatible pointer type
main.c:110: warning: excess elements in scalar initializer
main.c:110: warning: (near initialization for `tutti_semi')
main.c:110: warning: excess elements in scalar initializer
main.c:110: warning: (near initialization for `tutti_semi')
main.c:110: warning: excess elements in scalar initializer
main.c:110: warning: (near initialization for `tutti_semi')
main.c:117: parse error before "v"
main.c:110: parm types given both in parmlist and separately
main.c:122: `v' undeclared (first use in this function)
main.c:122: (Each undeclared identifier is reported only once
main.c:122: for each function it appears in.)
main.c:125: `s' undeclared (first use in this function)
main.c:127: `i' undeclared (first use in this function)
main.c:128: `tutti_semi' undeclared (first use in this function)
make.exe: *** [main.o] Error 1
Esecuzione terminata
Qualcuno mi saprebbe dire dove sbaglio?
P.S.: Utilizzo Dev-C++
Grazie Mille!
-- 
www.aradio.it
a_RADIO_content_provider

     }
A parte che l'indentazione fa un pò schifo, e che hai lasciato per la via
qualche graffa, comunque per passare un array ad una funzione basta un
puntatore; ti posto il codice della funzione corretto:
void crea_napoletane(CARTA *napoletane) {
 /* Definisco un array dei quattro semi del mazzo di carte napoletane */
 char *tutti_semi[4]={"Denari","Coppe","Bastoni","Spade"};
 int i; /* Indice del mazzetto */
 int v; /* Indice del valore */
 int s; /* Indice del seme */
 /* Creo il mazzetto di carte napoletane */
 v=1;
 s=0;
 for (i=0;i<=39;i++) {
  if (v > 10) {
   v=1;
   s++;
  }
  napoletane[i].valore=v;
  napoletane[i].seme=tutti_semi[s];
  v=v++;
 }
}
Ora dovrebbe compilare ;-)
Ciao

 Ciao
Grazie! Effettivamente l'indentanzione faceva un "po'" schifo! Problemi del
copia&incolla! ;-)
Solo che adesso mi da un altro errore:
main.c: In function `main':
main.c:25: conflicting types for `crea_napoletane'
main.c:14: previous declaration of `crea_napoletane'
main.c:25: warning: extern declaration of `crea_napoletane' doesn't match
global one
make.exe: *** [main.o] Error 1
Esecuzione terminata
Mi sa che l'errore sta quando mi vado a dichiarare il prototipo della
funzione all'inizio. Infatti io l'ho dichiarato:
/* Prototipi */
void crea_napoletane(CARTA *[]);
Mi sa che non è cosi, giusto?
Grazie mille.
--
www.aradio.it
a_RADIO_content_provider

 void crea_napoletane(CARTA *[]);
Si, la funzione prende solo un puntatore ad un struttura CARTA:
void crea_napoletane(CARTA *);
Comunque bastava che provassi a fare la modifica e a ricompilare ;-)
Ciao

 Ciao
Il fatto è che già ci avevo provato, sempre lo stesso errore... :-(
--
www.aradio.it
a_RADIO_content_provider

 Il fatto è che già ci avevo provato, sempre lo stesso errore... :-(
Prova a ripostare tutto il codice.
Ciao

> Prova a ripostare tutto il codice.
Ok, allora ricapitolando:
#include <stdio.h>
/* Definisco una struttura di tipo CARTA */
struct carta
       {
       int valore;
       char *seme;
       };
typedef struct carta CARTA;
/* Prototipi */
void crea_napoletane(CARTA *);
int main(){
/* Assegno ad un array il nuovo tipo appena creato */
CARTA mazzetto[40];
/* Chiamo la funzione che mi crea il mazzetto di carte napoletane */
 void crea_napoletane(CARTA *mazzetto);
}
/* Function che crea il mazzetto di carte napoletane.
Riceve in input un array vuoto di tipo carta e restituisce
in output lo stesso mazzetto riempito con tutti i semi e i valori
del mazzetto di carte napoletane */
void crea_napoletane(CARTA *napoletane) {
 /* Definisco un array dei quattro semi del mazzo di carte napoletane */
 char *tutti_semi[4]={"Denari","Coppe","Bastoni","Spade"};
 int i; /* Indice del mazzetto */
 int v; /* Indice del valore */
 int s; /* Indice del seme */
 /* Creo il mazzetto di carte napoletane */
 v=1;
 s=0;
 for (i=0;i<=39;i++) {
  if (v > 10) {
   v=1;
   s++;
  }
  napoletane[i].valore=v;
  *napoletane[i].seme=tutti_semi[s];
  v=v++;
 }
}
Facendo cosě non mi da piů errore ma se faccio una
printf("%d di %c\t", mazzetto[nc].valore, *mazzetto[nc].seme);
Per vedere il contenuto del mazzetto mi da errore...
Grazie mille per l'interessamento (pizza pagata se vieni da queste parti...)
--
www.aradio.it
a_RADIO_content_provider

 Per vedere il contenuto del mazzetto mi da errore...
Quale  errore? E`   inutile  che   tu  dica   "mi  da   errore",  scrivi
esplicitamente che errore ottieni.
Kronos
-- 
Home: 
http://kronoz.cjb.net
Ci sono due cose che l'uomo non puo` nascondere:
essere ubriaco ed essere innamorato.

 ha scritto:

 Grazie mille per l'interessamento (pizza pagata se vieni da queste
parti...)
Di dove sei? ;-)
Ciao

 Di dove sei? ;-)
del paese della pizza e del paese delle carte! ;-)
Grazie mille.
Patt.

 del paese della pizza e del paese delle carte! ;-)
Ma va, non l'avrei mai detto ;-p
Ciao