Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 15-12-2004, 15:00   #1
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
[C]strutture semplici

salve ragazzi

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

Codice:
#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:

Codice:
  gcc -Wall inail.c -o inail
inail.c:13: error: duplicate member `Codice_Cliente'
Come mai?
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek

Ultima modifica di RaouL_BennetH : 15-12-2004 alle 15:04.
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 15-12-2004, 15:02   #2
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
trovato l'errore

E sono sempre un pirla atomico, effettivamente l'avevo dichiarata due volte dentro la stessa struttura!!
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 15-12-2004, 15:33   #3
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
A pensarci bene, così come lo starei pensando questo programmino fa acqua da tutte le parti

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.
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 15-12-2004, 15:53   #4
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
uhm.....

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

?!?
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 15-12-2004, 16:25   #5
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
allora, ho scovato due errori:

Codice:
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:

Codice:
 /* 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?
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 15-12-2004, 16:29   #6
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Quote:
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.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 15-12-2004, 16:34   #7
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
Quote:
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.


è vero, che pirla che sono

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.
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 16-12-2004, 09:13   #8
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Immetti una stringa, fai i controlli che devi fare, e la converti in intero con atoi.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 23-12-2004, 13:18   #9
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
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)
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
Old 24-12-2004, 16:23   #10
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Se per te è importante controllare dettagliatamente l'input, leggilo con fgets e poi fai tutto quello che devi fare.
Quote:
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?
...?
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 25-12-2004, 14:27   #11
RaouL_BennetH
Senior Member
 
L'Avatar di RaouL_BennetH
 
Iscritto dal: Sep 2004
Messaggi: 3967
Quote:
Originariamente inviato da ilsensine

...?
Hai ragione, mi sono spiegato malissimo

volevo dire che, se al posto di fare:

Codice:
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.
__________________
Dai wafer di silicio nasce: LoHacker... il primo biscotto Geek
RaouL_BennetH è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 04:08.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v