Newsgroup: it.comp.lang.c
Titolo: conversione int-char

Salve,
dovrei convertire un intero (unsigned) in char per memorizzarlo in uno 
stream. Faccio un esempio per capirci meglio:
 
	cont++;
	fputc(cont, pin); //ecco dovrei convertire la variabile cont in un char
Grazie


Cosi' e' gia' corretto, a parte il commento. Cmq, ti consiglio di 
leggerti un qualunque tutorial di C per le basi, che a quanto pare mancano.
-- 
Mat/tia Belletti - Undergraduate student @ 
cs.unibo.it
ICQ: 33292311    - email: 
mbel...@cs.unibo.it
IRC: RedGlow     - site(s): 
http://www.cs.unibo.it/~mbellett
Linux registered user 299762 @ Linux registered machine 213003

 leggerti un qualunque tutorial di C per le basi, che a quanto pare mancano.
Mi mancano le basi dici! Quindi non so le regole del casting (long 
double>double>ecc....)
Forse mi sono spiegato male: se alla variabile cont c'è il valore 20 (ad 
esempio) io devo memorizzare questo valore sotto forma di char, proprio 
perché il primo parametro di fputc, cos'è?

 [cut]
+ info:
se scrivo "cout << cont << endl;"
in un ciclo il valore viene stampato correttamente, mentre la 
memorizzazione nel file non avviene come io desidero. Sarą per un lapsus.
Vedi se puoi aiutarmi Mattia!

 ha scritto nel messaggio
news:3Unqc.281875$rM4.11...@news4.tin.it...

FILE*f = fopen("prova.txt","w");
unsigned cont = 64;
cont++;
fputc(c,f);
fclose(f);
mette 'A' nel file

 memorizzazione nel file non avviene come io desidero. Sarą per un lapsus.
Ma non e' C++ questo ?
Ciao
Giuseppe

 mette 'A' nel file
Ciao Acaccia,
io devo memorizzare un numero, esattamente il 64, ma può essere 200, 3; 
a seconda di quanto vale in un ciclo.

 Ma non e' C++ questo ?
Certo che "cout" e' C++, era solo per dare l'idea. Sto lavorando ad un 
progetto, e quelli che ci lavoravano prima di me le routine per lettura 
e scrittura dei file le hanno sviluppate in C.
Ciao


Non mi e' chiaro: se devi salvare in numero 64, usi la fputc cosi', 
tranquilla. Il numero 64 equivale al carattere 'A', e questo e' il punto 
che credevo ti sfuggisse, e per cui ti ho consigliato un tutorial. Se 
invece devi scrivere la _stringa_ 64, ovvero i caratteri "6" e "4", usi 
la fprintf. Non vedo altre scelte.


 la fprintf. Non vedo altre scelte.
Non è che non ti è chiaro, piuttosto sono io che nella fretta di 
scrivere non mi sono spiegato bene. Ti 'astraggo' quello che mi serve 
con un esempio:
immagina un file di testo, estrai in un buffer ogni singola linea. In un 
secondo file, prima di memorizzare quella singola linea (quindi il 
buffer) vuoi aggiungere il numero di linea.
Quindi il file1.txt (ad esempio) contiene:
prima riga
seconda
terza
Io nel secondo file memorizzo:
1 prima riga
2 seconda
3 terza
e così via.
Per questo mi serve una variabile intera contatore, e quindi il suo valore.
Ciao

 Ciao
Allora la fputc non va bene. Devi usare la fprintf().
M.
-- 
"- in Italia cosa rischia uno che tortura?
- ..Se è una tortura e via, poco.. Se ha anche scaricato musica da 
Internet, quattro anni"
Sergio Staino (Bobo e figlia, maggio 2004)

 perché il primo parametro di fputc, cos'è?
La risposta e' NON SI PUO'!
'2' '0'  ("20") non stara' mai un char, venti ha bisogno di due caratteri,
quindi una stringa, un carattere solo non basta!
ovviamente se tu non sei interessato a stampare "20", ma a tenere il valore
numerico 20 in un char, allora puoi (un char tiene fino a +127). Ma stampare
il valore numero 20 significa stampare un carattere strano nel file!
Come ti ha consigliato Mattia Belletti, anche io ti consiglio un buon libro
di C od un buon tutorial.
Tommy

 illustrativi!
Della serie: usa la fprintf()!
Ciao! ;)


 [cut]
grazie il consiglio sul libro. Vi faccio contenti!

 [cut]
Guarda che la risposta te l'hanno data: scrivi l'istruzione
fprintf(out, "%u", cont);
ovviamente al posto di 'out' e 'cont' metti le tue variabili.

 è come se dovessi contare le linee.
Se parli mandarino ti posso capire... se parli cantonese invece no, quello
devo ancora studiarlo ;-)
Scherzi a parte, noi abbiamo capito, sei tu che forse non capisci...
Ti abbiamo offerto varie soluzioni che funzionano...
Ad ogni modo, ecco un esempio che funziona, cosi' che tu possa capire.....
(ah, l'esempio e' solo per scopi illustrativi, non e' il miodo migliore per
fare la cosa.... (si fa per risparmiare tempo)):
<CODE>
#include<stdio.h>
int main()
{
    char buffer[512];
    FILE *fin = NULL;
    FILE *fout = NULL;
    int c = 0;
    fin = fopen("main.cpp","r");
    fout = fopen("main.txt","w");
    if((!fin)||(!fout)){
        printf("Cannot open/create one of the files....\n");
        return 0;
    }
    while(!feof(fin)){
        ++c;
        fgets(buffer,511,fin);
        // on the screen:
        fprintf(stdout,"[%05d]   %s",c,buffer);
        // and on the file:
        fprintf(fout,"[%05d]   %s",c,buffer);
    }
    fclose(fout);
    fclose(fin);
    return 0;
}
</CODE>
il programma (main.cpp) una volta compilato e lanciato legge il proprio
sorgente ed inserisce i numeri di riga mettendo il tutto in main.txt:
<MAIN.TXT>
[00001]   #include<stdio.h>
[00002]
[00003]   int main()
[00004]   {
[00005]       char buffer[512];
[00006]       FILE *fin = NULL;
[00007]       FILE *fout = NULL;
[00008]       int c = 0;
[00009]
[00010]       fin = fopen("main.cpp","r");
[00011]       fout = fopen("main.txt","w");
[00012]       if((!fin)||(!fout)){
[00013]           printf("Cannot open/create one of the files....\n");
[00014]           return 0;
[00015]       }
[00016]
[00017]       while(!feof(fin)){
[00018]           ++c;
[00019]           fgets(buffer,511,fin);
[00020]           // on the screen:
[00021]           fprintf(stdout,"[%05d]   %s",c,buffer);
[00022]           // and on the file:
[00023]           fprintf(fout,"[%05d]   %s",c,buffer);
[00024]       }
[00025]
[00026]       fclose(fout);
[00027]       fclose(fin);
[00028]
[00029]       return 0;
[00030]   }
</MAIN.TXT>
Quando poi vuoi possiamo continuare a parlare in dialetto cinese, ma forse
sei tu che non lo comprendi, non noi!
Quindi vale ancora il consiglio del libro di cinese (senza inese).
Ciao,
Tommy