PDA

View Full Version : [c] operazioni tra float e int, possibili???


fenix576
19-07-2010, 14:18
dovrei moltiplicare un float per un int, è possibile fare ciò???
es.
numcopie è int,
mentre *****.prezzo sono float.

registro[0].prezzo = articolo[0].prezzo * numcopie;

con questo comando non funziona, cè un modo???

fenix576
19-07-2010, 15:10
visto che mi ci trovo chiedo anche un ultima cosa:

nell' archivio che sto facendo (gestito con struct di stringhe)
vorrei far apparire la scritta "l'archivio è vuoto" se facendo un controllo, isultasse che un campo dell'articolo in posizione 0 risultasse vuoto.

esempio: se articolo[0].nome == 'vuoto', stampa l'archivio è vuoto.
al posto di vuoto cosa dovrei metterci?

mic85rm
19-07-2010, 15:13
penso tu debba fare un cast...

Isildur84
19-07-2010, 15:27
Dipende da come hai implementato la tua stringa. Se è implementata come un puntatore, allora semplicemente potresti vare

if (articolo[0].nome == null) Errore.

Oppure potresti tenere un contatore delle posizioni occupate, o alla prima libera e quindi ti basterebbe un controllo sul suo valore.

Cosa intendi con "con questo comando non funziona"? Dà errore o produce risultati errati?

fenix576
19-07-2010, 15:41
Dipende da come hai implementato la tua stringa. Se è implementata come un puntatore, allora semplicemente potresti vare

if (articolo[0].nome == null) Errore.

Oppure potresti tenere un contatore delle posizioni occupate, o alla prima libera e quindi ti basterebbe un controllo sul suo valore.

Cosa intendi con "con questo comando non funziona"? Dà errore o produce risultati errati?

avevo sbagliato io a digitare per quanto riguarda la moltiplicazione tra in e float.

cmq
if (articolo[0].band == 'null') printf("L'INVENTARIO E' VUOTO\n"); non funziona
senza le ' ' manco, 'NULL' manco. non come fare a controllare se la stringa è vuota.

Isildur84
19-07-2010, 16:14
avevo sbagliato io a digitare per quanto riguarda la moltiplicazione tra in e float.

cmq
if (articolo[0].band == 'null') printf("L'INVENTARIO E' VUOTO\n"); non funziona
senza le ' ' manco, 'NULL' manco. non come fare a controllare se la stringa è vuota.

La giusta dichiarazione è NULL. Non è una stringa, quindi gli appici non hanno senso.
Mi sa che il problema è più profondo.
Come è fatta la tua struttura articolo?

Cerco di spiegarti:

In C le stringhe sono rappresentate da vettori di caratteri terminati dal carattere nullo. Inoltre in C, vettori e puntatori sono, per così dire, intercambiabili e infatti di norma si utilizzano vettori allocati dinamicamente per memorizzare le stringhe.

Ad esempio la tua struttura potrebbe essere così definita (perdona gli errori del linguaggio ma è da un po' che non lo uso)


struct Articolo {
char * nome;
}



In fase di inizializzazione si farebbe poi una cosa del genere:


for (i = 0; i < MAX; i++)
articolo[i].nome = NULL;


In questo modo sarebbe facilissimo capire quando un nome è presente o meno

infine per riepire i nomi, supponendo di leggere i dati e di salvarli in un vettore di char chiamato stringaLetta basterebbe fare

articolo[i].nome = strdup(stringaLetta);

Spero di esserti d'aiuto.

fenix576
19-07-2010, 19:00
in pratica ho definito prima le stringhe con

typedef char string[200];

e poi cè lo struct con

typedef struct {
string band;
string album;
etc
} articolo

ho una funzione che riempie a ogni ciclo l'archivio con i dati:
a partire dall'inidce a 0.

non ho ben capito come implementare il codice da te consigliato.

Isildur84
19-07-2010, 20:43
Il tuo codice ha uno spreco abbastanza grande di risorse, inoltre non permette grandi controlli.

Una soluzione a cui non avevo pensato è quella di usare la funzione strlen, a patto che tu riempi le stringhe con il carattere di terminazione se sono vuote.

Altrimenti potresti passare ad un'allocazione di tipo dinamico

typedef struct {
char* dato1;
char* dato2;
} articolo;


Ti conviene fare un primo ciclo del tipo

for (i =0; i < MAX; i++)
articolo[i].dato1 = NULL;
articolo[i].dato2 = NULL;

A quel punto potrai riempire le stringhe attraverso la funzion strdup.
che ti ho consigliato prima.
Visto che i dati sono stati inizializzati a NULL avrai modo di controllare se é pieno o meno.