Newsgroup: it.comp.lang.c
Titolo: da int a char...

salve ragazzi,
non appena penso di aver capito benissimo un argomento, mi salta fuori un
caso che non capisco! la differenza tra un int e un char, e' solamente che
il char ha in piu' il terminatore 0 ('\0'), detto cio' ho fatto un
programmino stupidissimo che mi trasporta un int in un char:
#include <stdio.h>
#include <string.h>
int main(void){
 int i=1;
 char pippo[100];
 strcpy(pippo,i+'\0');
 printf("Pippo = %s",pippo);
 getchar();
}
invece il dev-c mi ritorna errore: invalid conversion from char to char*....
nn capisco... aiutatemi a capire!
grazie 1000 a tutti
Dade

 }
Anzitutto... cosa dovrebbe fare questo programma? Convertire in stringa 
un numero? Dimmi cosa dovrebbe fare...
E comunque strcpy vuole due puntatori: pippo essendo un array potrebbe 
anche andare bene, ma i non č un puntatore a char, e quel i+'\0' cos'č???
Secondo me devi ripassarti un po' i tipi di base del C e la sintassi 
stessa...
-- 
Quando noi ignoranti eravamo di piů, tutto era piů bello (A. Celentano).
  ___   _   ___ _  _______   _______ ___
|   \ /_\ | _ \ |/ / _ ) \ / /_   _| __|
| |) / _ \|   / ' <| _ \\ V /  | | | _|
|___/_/ \_\_|_\_|\_\___/ |_|   |_| |___|

 printf("Pippo = %s",pippo);
A questo punto, questa printf() stamperà "Pippo = 1", che è quello che vuoi.
(Un appunto però. Ti sei dimenticato di mettere il carattere di new line:
dovrebbe essere "Pippo = %s\n".)
Detto per inciso, lo stesso risultato si potrebbe ottenere anche senza
quell'inutile array pippo:
   printf("Pippo = %d\n", i);
--
Cingar
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 Cingar
chiedo scusa per il lungo papiro che ho scritto, sicuramente pieno di
cavolate, ma nn riesco proprio a capire!
Grazie 1000 sia a cingar che a darkbyte... sono "cocciuto" scusate :-)
Dade

 un char :)
Uno char al massimo è un numero che, passato alle funzioni di stampa, 
viene automaticamente rappresentato con un carattere ascii 
corrispondente al suo valore, e si intende seguito dal carattere '\0' 
che è un byte 0.
Non è una somma.
E così 1+0 è 1 e non è un carattere ascii.
-- 
Quando noi ignoranti eravamo di più, tutto era più bello (A. Celentano).


 E così 1+0 è 1 e non è un carattere ascii.
grazie 1000 dell'aiuto e della pazienza :)
ciao
Dade

 pensato... che cosa contorta pero' :)
Non e' contorta. Come tu sai i computer tengono valori in memoria sotto
forma di bits. Una sequenza di bits e' un numero binario. Quindi i computer
lavorano con numeri binari.
Ora se i computer possono solo tenere valori numerici binari, come e'
possibile avere lettere, stringhe, testo, musica, immagini, programmi,
sistemi operativi, etc...
Beh, partendo dal semplice, per le lettere, una lettera puo' essere
associata ad un certo valore. Ecco perche' c'e' ASCII:
A = numero decimale 65 (ovvero 01000001 binario).
B = 66
C = 67
....
....
a = 97
b = 98
....
etc...
In un file di testo e' giusto che le cifre numeriche abbiano una loro
rappresentazione testuale. Ovviamente avrebbero potuto optare per:
0 = 0
1 = 1
2 = 2
.... etc...
ma nella tabella ASCII invece i numeri sono:
0 = 48
1 = 49
2 = 50
3 = 51
4 = 52
5 = 53
6 = 54
7 = 55
8 = 56
9 = 57
ad esempio in C il primo sistema non funzionerebbe visto che la cifra zero,
codificata come 0 segnerebbe la fine di una stringa (le stringhe in C sono
terminate da un byte nullo in fondo alla stringa).
Ora data la rappresentazione ASCII del numero 0 (48), che da ora in poi
scriveremo '0' per distinguerlo da 0 (il primo vale 48 il secondo 0),
possiamo usare tale valore per convertire un numero nel corrispettivo ASCII:
5 + '0'
scrivere 5 + '0' e' come scrivere 5+48 che vale 53 che guarda caso e' il
codice ASCII per il carattere '5'.
Usare il precedente sistema garantisce che, in sistemi diversi da ASCII, ma
che prevedono che le 10 cifre numeriche sia consecutive, il codice sia
portabile.
Usa il numero 48 esplicitamente (5+48) o direttamente 53 renderebbe invece
il programma legato al sistema ASCII (che comunque e' quasi universalmente
supportato).
In pratica se hai:
char stringa[] = "Io ho 2 anni";
int numero = 0;
char carattere;
carattere = numero + '0';
stringa[6] = carattere;
printf("%s\n",stringa);
questo stampa la stringa:
"Io ho 0 anni"
Se tu avessi messo il numero 0 direttamente (invece di '0') nella stringa
avresti scritto:
"Io ho "
E poi la stringa sarebbe finita.
Un discorso simile vale per altri numeri tipo 5, dove nel primo caso avresti
avuto il risultato voluto, nel secondo invece no (anche se la stringa
probabilmente non sarebbe terminata). (basta cambiare la linea: int numero =
0; in int numero = 5; ad esempio).
Occhio invece ad una cosa tipo:
numero = 23;
carattere = numero + '0';
Questo e' ERRATO!!!
Un 23+48 fa 71 che e' 'G', ovvero la lettera G maiuscola!
devi fare le due digit una alla volta, prima 2 poi 3.
Per la tabella ASCII vai su:
http://en.wikipedia.org/wiki/ASCII
e guarda in particolare la sezione "ASCII printable characters".
Tommy

 dichiarazione... sbaglio?
Decisamente, sorry. :-)
Impara che cosa sono i puntatori, anche solo a livello teorico, poi tutto
diventerà più chiaro.
Contrariamente a quanto avevo sostenuto proprio qui un mesetto fa (mi
sbagliavo, lo ammetto!), ti consiglierei di accantonare temporaneamente il
K&R e di comprarti un manuale di C un po' più propedeutico. L'ideale per te,
se esiste, sarebbe un manuale di C pensato espressamente per programmatori
VB, che ti spieghi bene le differenze (moltissime) e le somiglianze
(pochine) fra i due linguaggi.


 Cingar
Ok ora le cose sono molto piu' chiare... sperando di aver capito tutto :)
Riguardo al libro... ho sentito parlare del deitel "C Corso completo di
programmazione"... che ne dici? certo, credo che riferimenti a vb nn ce ne
saranno pero' magari e' meno "sintetico" del K&R e forse spiega meglio tutto
cio' che fa il codice. che ne dici?
beh... un doveroso e sentito grazie a tutti!
ciao
Dade

...



Grazie del consiglio avevo gia' in mente di prenderlo, ne ho sentito parlar
bene :)
speriamo che mi chiarisca un po' di idee :) in effetti su molte cose faccio
molta confusione :,(
ciaooo
Dade

 C della collana Deitel e Deitel.
OK, lo cercherò in libreria, grazie.
