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?
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.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.