PDA

View Full Version : [C]strutture semplici


RaouL_BennetH
15-12-2004, 15:00
salve ragazzi :)

sono sempre qui a rompere. Ho un problemino di questo tipo:


#include <stdio.h>
#include <stdlib.h>
#define MAXIMUS 255

struct file_richiesta {
int Codice_Cliente[9];
} richiesta; /* struttura per file di richiesta con unico campo */


struct file_dati {
int Codice_Sede[6]; /* File dati F24 */
int Codice_Cliente[9];
int Codice_Cliente[9];
int C_CodiceCliente[3];
int P_RichPag[12]; /* Sul modello F24 riportare solo le 6 cifre a destra */
char Causale[3];
double importo[18]; /*Espresso in centesimi di Euro */
} dati; /* fine file dati f24 */


struct dettaglio_premio {

int Codice_Cliente[9];
int ID_record[3]; /* da inserire solo valori tra : 01 03 05 per anni 2000 2001 2002 */
double p_anticipatodip[19]; /* in centesimi di euro e il primo carattere rappresenta il segno */
double p_anticipatoart[19];
double p_regolazionedip[19];
double p_regolazioneart[19];
double p_gestionespec[19];
} premio; /* Fine Dettaglio Premio */

struct dettaglio_addizionale {
int Codice_Cliente[9];
int ID_record[3]; /* da inserire solo valori tra 02 04 06 per anni 2000 2001 2002 */
double importo_totalepr[18]; /*in centesimi di euro */
double Misura_Addizionale[18];
double importo_dovuto[18];
double impadd_art[18]; /* addizionale art.181 */
double imp_totaledov[18];
} addizionale;

int main()
{
FILE *fp;
char nomefile[] = "\home\RaouL\Desktop\inail\inail.txt" ;
int scelta;
for ( ; ; )
{
printf("\n1) Inserimento dati\n");
printf("\n2) Uscita Programma\n");
scanf("%d" &scelta);

if( scelta < 1 || scelta > 2)
printf("Scelta non valida!");
else if (scelta == 2)
printf("Programma terminato con successo");
break;
}
}
:syntax on


Come vedete, ci sono quattro strutture, che servono a contenere determinati dati. Ora, mi era parso di capire che in strutture diverse fra di loro, potevo anche dichiarare delle variabili con lo stesso nome, ma a quanto pare, non devo aver capito bene :(

Difatti, questo è il risultato di gcc:


gcc -Wall inail.c -o inail
inail.c:13: error: duplicate member `Codice_Cliente'


Come mai?

RaouL_BennetH
15-12-2004, 15:02
trovato l'errore :D

E sono sempre un pirla atomico, effettivamente l'avevo dichiarata due volte dentro la stessa struttura!!

RaouL_BennetH
15-12-2004, 15:33
A pensarci bene, così come lo starei pensando questo programmino fa acqua da tutte le parti :mbe:

Vorrei invece farlo così:

Mi creo un file strutture.c che contenga solo le strutture
e poi il file main.c che invece si occupi di gestire gli input e la memorizzazione dei dati su un file.

Sarebbe meglio così oppure è indifferente?

Nel caso in cui sia meglio, mi dareste qualche chiarimento su come "legare" due files diversi fra loro nella compilazione?

Thx.

RaouL.

RaouL_BennetH
15-12-2004, 15:53
uhm..... :what:

sto provando ad inserire solo due dati e a scriverli nel file di testo ma...

succede questo:

se inserisco per int Codice_Cliente[9]; il valore 12345678 poi, nel file mi riporta non so perchè: 13657888

?!? :confused:

RaouL_BennetH
15-12-2004, 16:25
allora, ho scovato due errori:



fprintf(fp, "%d %d\n", richiesta.Codice_Cliente, dati.Codice_Scheda);



andava senza l'operatore "&" davanti ai dati delle strutture.

Ok, però, mi funziona solo nel caso in cui io dichiari tale dato non come un array ma come una variabile singola; mi spiego meglio:



/* con questo codice non mi riconosce il numero inserito */

int codice_cliente[9] ;

/* con questo codice me lo scrive correttamente */

int codice_cliente;



a me serviva limitare l'ampiezza di tale campo perchè si possono inserire solo fino ad 8 cifre, oer questo avevo dichiarato l'array di 9 elementi, considerando il carattere null di fine riga. Mi potreste chiarire un pò le idee?

ilsensine
15-12-2004, 16:29
Originariamente inviato da RaouL_BennetH
a me serviva limitare l'ampiezza di tale campo perchè si possono inserire solo fino ad 8 cifre, oer questo avevo dichiarato l'array di 9 elementi, considerando il carattere null di fine riga. Mi potreste chiarire un pò le idee?
....?
int foo[9] dichiara un array di 9 interi, non ha nulla a che vedere con le "cifre" che compongono il numero. "Carattere di fine riga" riguarda le stringhe, non i numeri.

RaouL_BennetH
15-12-2004, 16:34
Originariamente inviato da ilsensine
....?
int foo[9] dichiara un array di 9 interi, non ha nulla a che vedere con le "cifre" che compongono il numero. "Carattere di fine riga" riguarda le stringhe, non i numeri.


:doh:
è vero, che pirla che sono :muro:

Quindi, su variabili di tipo int, come si può limitare l'inuput da parte dell'utente?

Cioè, io avrei bisogno che all'inserimento del valore di quella variabile, l'utente non possa immettere più di 8 cifre.

ilsensine
16-12-2004, 09:13
Immetti una stringa, fai i controlli che devi fare, e la converti in intero con atoi.

RaouL_BennetH
23-12-2004, 13:18
Quindi, stavo pensando a questo:

Potrei trattare tutti i dati che vengono richiesti come char e poi convertirli?

Se è conveniente, potrei anzichè creare millemila variabili di tipo char, creare un unico array tipo:

char dati_richiesti[1000] e poi pensare come assegnare a dati_richiesti[1] il codice cliente (ad esempio), a dati_richiesti[2] l'importo e così via?

e poi gestirli con un indice? (int i)

ilsensine
24-12-2004, 16:23
Se per te è importante controllare dettagliatamente l'input, leggilo con fgets e poi fai tutto quello che devi fare.

Se è conveniente, potrei anzichè creare millemila variabili di tipo char, creare un unico array tipo:

char dati_richiesti[1000] e poi pensare come assegnare a dati_richiesti[1] il codice cliente (ad esempio), a dati_richiesti[2] l'importo e così via?

...?

RaouL_BennetH
25-12-2004, 14:27
Originariamente inviato da ilsensine

...?

Hai ragione, mi sono spiegato malissimo :(

volevo dire che, se al posto di fare:



char codice[10]
char settore[10]
char cognome[10]
char nome[10]

etcetera......

mi conveniva di più fare:

char dati_generici[1000]



ed utilizzare poi i singoli elementi di dati_generici per memorizzare i vari valori.