Newsgroup: it.comp.lang.c
Titolo: ultimo di spesa

#include <stdio.h>
     main()
          {
          int merce;                                  /* quantità merce*/
          double prezzo_unit, spesa, spesa_tot;
           spesa_tot = 0;
           FILE *fp=fopen ("C:/Documents and
Settings/Administrator/Desktop/spesa.txt","r");         /*aperto in sola
lettura*/
           while(fscanf(fp,"%d%d",&merce,&prezzo_unit) !=EOF)
             {
             spesa = merce * prezzo_unit;
             spesa_tot += spesa;
             printf("\n %d %d,spesa,spesa_tot");
             }
            fclose(fp);
           }
ora mi dà errore sull fclose(fp); udiclaread function sto impazzendo
cmq non scrive in colonna i numeri è tutto sballato io getto la spugna forse
sarà l acosa migliore da fare!!!!
per quanto mi applichi non riesco a capirlo sto azzo di linguaggio c!!!!
ma vi chiedo un favore vorrei passare domani l'esame
potreste dirmi la soluzione a questo per me enigma?
printf("\n%d%f,spesa,spesa_tot");
 ho provato anche la soluzione di Massimiliano
ma non funziona non riesco a trovarla vi prego dopo sparisco
grazie di cuore

ma scusate mi genera infinti numero come se fosse un cilco continuo non sņ
non sņ non riesco
va bņ grazie di cuore

Credo personalmente che darti la soluzione sarebbe ingiusto nei confronti
dei tuoi colleghi che si sono impegnati, o che per lo meno non hanno fatto
sprecare al mondo tutta la banda che hai fatto sprecare tu. Ti posso dire
che la soluzione è vicina (io personalmente ci ho messo 5 minuti, ma ho
dovuto sfogliare una guida di C. Tutto è relativo.... Ma seguendo il primo
consiglio puoi anche evitare la guida al C). Ti do anche tre aiuti: usa i
float invece dei double, stampa i parziali (stampa quello che stai estaendo
dal file) e controlla scanf e printf.
--- bye

fabrizio wrote:

Se leggi i miei posts avrai le risposte che cerchi.
Credo di averti dato la soluzione...
Solo...
Un pochino "spezzettata"... ;)
PS: In bocca al lupo per il tuo esame.
Marcello

ma la soluzione scritta non me la potete dare sono nel pallone non riesco a
vedere la soluzione neppure se me la scrivete
ve lo chiedo in ginocchio non č senso di prigrizia ma č che non ragiono piů
l'ultimo che ho fatto mi scroveva
3923333.00000 spesa, spesa_tot
cioč da impazzire

fabrizio wrote:
/* Queste le dichiarazioni. */
int merce;
double spesa, spesa_tot;
float prezzo_unitario;
// Il prezzo unitario lo dichiaro float.
/* Questo e' il cilco while. */
while (fscanf(fp,"%d%f", &merce, &prezzo_unitario) != EOF)
// Alla fscanf passo gli indirizzi delle variabili.
   {
     printf("\n QUANTITA': %d", merce);
     // Alla printf passo il valore delle variabili.
     printf("\n PREZZO UNITARIO: %.2f", prezzo_unitario);
     spesa = merce * prezzo_unitario;
     printf("\n COSTO: %.2f\n", spesa);
     spesa_tot += spesa;
     // Il calcolo della spesa totale lo faccio nel while.
   }
printf("\n\n SPESA TOTALE: %.2f", spesa_tot);
// La stampa della spesa totale la faccio fuori dal while.
Come ti ho gia' detto una volta, non sono la tua coscienza, ma da tutto
questo non credo tu abbia guadagnato qualcosa.
Marcello

 questo non credo tu abbia guadagnato qualcosa.
Se avessi creduto veramente in ciò non gli avresti dato il programma
completo.
--- bye

E inoltre non hai inizializzato il valore del costo totale. Strano che non
ti sia beccato un bel warning per i denti. Usi il +=... Mah.
Inoltre (proprio per fare la punta allo ######), il nome della variabile
"merce" è sbagliato. quantita era meglio. Merce fa pensare a una
descrizione, non a una quantita.
E... Ma questo non ne sono sicuro:
merce * prezzo_unitario
Non è meglio fare l'opposto? (prezzo_unitario * merce). Siamo sicuri che il
compilatore casti merce a double e non casti invece prezzo_unitario a int?
--- bye

ma la soluzione scritta non me la potete dare sono nel pallone
   A meno che tu non sia un laureando in sociologia che sta facendo
sperimentazione sulle pulsioni egocentriche dei frequentatori di un ng
tecnico (e di queste pulsioni se ne sono viste diverse in risposta ai
tuoi post), direi che sarebbe un bene per te, se nessuno ti
rispondesse (anche a costo di non superare un esame che non sei
*evidentemente* in grado di sostenere).
-- 
S.L.

Fabrizio, smettila per cortesia.
Questo ng non č un luogo in cui chiedere la soluzione ai propri
esercizi.
Cerca di studiare un buon manuale del linguaggio e NON ROMPERE !

 completo.
Hai ragione, non ci ho creduto fino in fondo, ma, in fondo, il peggio e' 
il suo.
Marcello

 compilatore casti merce a double e non casti invece prezzo_unitario a int?
Ho provato.
Credo sia la stessa cosa.
O no?
Marcello

 Il casino l'ho fatto con il copia-incolla...
Come vedi il codice non glielo ho dato proprio "tutto"... :/
Marcello

Carissimo Andrea Laforgia
Non "Rompere" lo dici a chi sò io:
1) non penso di essere stato scortese nei tuoi confronti
2) la soluzione degli esercizi non era rivolto a te;
3) non romper dillo ai tuoi parenti
Maleducato!!!!

> Non "Rompere" lo dici a chi sò io:
No, lo dico proprio a te.  Il vero maleducato è chi non rispetta le
regole del gruppo.
In questo caso tu.  Questo gruppo di discussione io lo frequento da
moltissimo tempo, sufficiente per sapere che non è un luogo in cui
chiedere le soluzioni ai propri (banali) esercizi.  Quindi studiati un
manuale e NON ROMPERE.

Ciao Fabrizio,
una domanda sola:
ora, dopo i suggerimenti, funziona?
Fammi sapere.

 ha scritto nel messaggio
news:P1Nac.104649$FJ6.3...@twister1.libero.it...

Non interessa piu'.
Sembra che l'esame sia superato quindi C per lui sara' la lettera dopo il B
e prima del D.
Ciao
Giuseppe

Invece no ragazzi mi interessa e come studiare il c infatti per mitivi di
tempo impiego solo due ore serali a rileggermi quel manuale che ho letto tre
volte ma senza, (sicuramente metterci testa ) perchè anzioso di sapere tutto
e subito!!
ora provo con calma a leggermi passo passo - capitolo per capitolo- pagina
per pagina il libro D&D che però secondo me è fatto malissimo. Sopratutto
per chi è alle prime armi.
Allora dopo la Soluzione offertami da Marcello il programma funzionava
benissimo
in output veniva cosi
quantità : ....
prezzo Unitario:
costo:
quantità : ....
prezzo Unitario:
costo:
quantità : ....
prezzo Unitario:
costo:
 il codice lo posto qui:
############################################################################
################################################
/* Calcolo Spesa*/
#include <stdio.h>
main()
      {
int merce;
double spesa, spesa_tot;
float prezzo_unitario;
spesa_tot =0;
FILE *fp=fopen ("C:/Documents and
Settings/Administrator/Desktop/spesa.txt","r");
while (fscanf(fp,"%d%f", &merce, &prezzo_unitario) != EOF)
   {
     printf("\n QUANTITA': %d", merce);
     printf("\n PREZZO UNITARIO: %.2f", prezzo_unitario);
     spesa = merce * prezzo_unitario;
     printf("\n COSTO: %.2f\n", spesa);
     spesa_tot += spesa;
   }
printf("\n\n SPESA TOTALE: %.2f", spesa_tot);
fclose(fp);
}
############################################################################
###############################################
Però una domanda poiché fortunatamente all'esame mi è capitato una cosa del
genere tipo *fp=fopen, scrivere un programma in c che legga da file .txt
il prof. vedendo le (cazzate di codice che scrivevo) mi ha detto che non è
buona regola del C dichiarare quanto sotto:
FILE *fp=fopen ("C:/Documents and
Settings/Administrator/Desktop/spesa.txt","r");
ma farlo cosi: difatti mi ha corretto
FILE *fp
fp=fopen("C:/Documents and Settings/Administrator/Desktop/spesa.txt","r");
che differenza c'è ? (bohhhh ) lo scoprirò..
siccome a detta di qualcuno NON DEVO ROMPERE - "DETTO FATTO NON INTASERO'
PIU IL NG DI BANALI ESERCIZI".
SICCOME QUESTA PERSONA è ARRIVATA DOPO ANNI ANNI DI DURO STUDIO DEL C CON
TREMILA LIBRI A RAGGIUNGERE UN LIVELLO PER QUANTO INVIDIABILE, IO IN POCO
MENO DI 20 GIORNI HO PASSATO L'ESAME (NATURALMENTE COL VOSTRO AIUTO E VI
RINGRAZIO DI CUORE PERCHE SENZA DI VOI NON SAREI MAI RIUSCITO A PASSARE.).
ORA PROCEDO CON ALTRI STUDIO DIFFERENTI DI CUI DI CERTO NON CERCHERO' IL
FOSTRO AIUTO E MI METTO A STUDIARE
Economia
eidomatica
diritto
dbms
cult.europea
 per giugno
quanto tempo uno ha per poter leggersi il c che solo per capire un'esercizio
ci vuole un'ora(NEL MIO CASO)
 :il giorno è composto da 24 ore
sveglia alle otto:
4ore dbms
ore 12:00
pausa pranzo
riprendo alle 14:00
2ore Economia
2ore diritto
2ore cult.europea
ore 20:00
pausa cena
ore 21:00 prendo il libro D&D e leggo
ore 21,30m stecchito morto sul letto.   mahhhhhhhhhhhhhhhhh!!!!!!
un giorno dovrebbe essere composto da 48 ore
 e siccome dovrei anche non fargli spendere soldi a mio padre di affitti di
casa luce spesa del condominio.
NON HO IL TEMPO MATERIALE PER CONOSCERE IL C COME QUALCUNO SPERA!!!!!!
Capito S.....!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! (chi se la sente se la suona)
SARA UNA COSA PER ME FARLO QUANDO MI SARò LAUREATO........ E AVRO' SOLDI
MIEI!

FILE *fp;
fp=fopen("C:/Documents and Settings/Administrator/Desktop/spesa.txt","r");
La differenza sta nel fatto che non tutti i compilatori accettano che sia il
ritorno di una chiamata ad una funzione ad inizializzare una variabile che
sta per essere dichiarata/allocata (fp).


Questa mi mancava... Ma si parla di compilatori arcaici/strani, o è una
svista dello standard?
--- bye

Ciao Giuseppe,
il problema č che non dovrebbe funzionare neanche cosě, personalmente
ritengo che chi inizia a programmare in C debba compilare con il massimo
livello di warning, sopratutto quando "gioca" con i tipi di dato. Purtroppo,
una delle grandi pecche dalla famiglia printf/scanf e delle funzioni a
parametri variabili in generale č proprio quella di non poter essere
controllata dal compilatore.

Ciao,
sovente è sufficiente passare da una verione del compilatore a quella
precedente.

Mi hai fatto venire in mente un compilatore della "Green Hills" (mi pare si
scriva così) su piattaforma Unix Olivetti.
Questo a Warining 0 (zero) pretendeva che assegnando il valore di un tipo di
dato ad un altro tipo di dato, se ne dichiarasse l'effettiva intenzione
forzando il recast. Ad esempio:
long a;
int b;
b = 5;
a = b;
diventava, pena lo stop della compilazione
a = (long)b;
... e già ...

 a = (long)b;
Beh... Ma questo č un caso di bug del compilatore. Inoltre lo standard non
prevede che il long sia per lo meno in grado di contenere un int?
--- bye

Non è corretto chiamarlo bug bisogna chiamarla fulminazione mentale di quel
messo male che ha preso decisioni sul parser di questo compilatore. Per il
resto hai pienamente ragione.