|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: May 2005
Messaggi: 249
|
[C] da int a char
il problema è questo:
io ho un int per esempio 350 devo portarlo in un array di char dove ogni elemento dell'array è un numero decimale cioè '3' '5' '0' ora il mio problema non è isolare i singoli numeri perché dividendo per migliaia, centinaia ecc ci riesco ma il mio problema è creare l'array di char perché se per esempio scrivo char array[0] = 350/100 (quindi mi darebbe 3 essendo divisione tra interi) quel 3 lui nell'array[0] me lo scrive come il carattere corrispondente all'int 3 ma invece deve scrivermi proprio 3 non so se ho fornito una chiara spiegazione... qualche idea? |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Gli aggiungi '0' (che ha valore 48).
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
#3 |
|
Moderatore
Iscritto dal: Nov 2003
Messaggi: 16211
|
Se stai usando il set di caratteri ASCII, le cifre decimali sono una dopo l'altra, per cui, se n è una variabile int il cui contenuto è compreso tra i valori 0 e 9, allora il carattere corrispondente è
Codice:
n + '0'
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu |
|
|
|
|
|
#4 |
|
Member
Iscritto dal: May 2005
Messaggi: 249
|
chiedo scusa ma non credo di aver capito...
considerando il mio esempio dovrei scrivere char array[0] = 350/100 + '0' ??? ma se per esempio io ho 3 lui non mi deve scrivere il carattere corrispondente a 3....mi deve scrivere proprio 3!!!! |
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Quindi che tu scriva: char c = 51; char c = '3'; char c = 3 + '0'; è la stessa cosa.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#6 |
|
Member
Iscritto dal: May 2005
Messaggi: 249
|
ok ma non funziona...
ho scritto char array[0]; array[0]=(350/100)+48; printf("%c",array[0]); e mi stampa un carattere diverso a caso ogni volta... |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
#8 |
|
Member
Iscritto dal: May 2005
Messaggi: 249
|
ops scusa ho sbagliato a digitare è
char array[10] ad ogni modo ho riavviato il compilatore e ora funziona (il visual C fa spesso cosi non so perché)ma quello era un programma esempio per capire il concetto che ora grazie a voi ho capito, solo che l'originale è in un ciclo for e di tutto il ciclo funziona solo con il primo int per esempio 350, 3 me lo scrive bene e gli altri due li mette a caso immagino sia un problema dovuto al ciclo for... for(i=k;i>=1;i=i/10){ if((somma/i) != 0) { decimali[j] = (somma/i)+48; j++; decimali = (char *)(realloc(decimali,j+1*sizeof(char))); } } dove k viene precedentemente calcolato come 1000000000 e somma è l'int in questione (per esempio 350) quando vado a stampare for(i=0;i<j;i++){ printf("%c",decimali[i]); } mi viene bene solo il primo carattere... |
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Mar 2004
Messaggi: 16053
|
Vediamo di capire meglio quello che chiedi... supponiamo per semplicità che tu abbia un intero n = 3 ed un carattere c. Tu vuoi fare in modo che dopo l'assegnamento di n a c l'utilizzo di Codice:
putchar(c) Codice:
c = n + '0' |
|
|
|
|
|
#10 |
|
Member
Iscritto dal: May 2005
Messaggi: 249
|
grazie sirus con le vostre spiegazioni questo mi è chiaro...
ma come ho scritto nel mio post precedente nel for che ho fatto non so perché questa operazione mi va bene sempre e solo con il primo carattere...ci deve essere uno di quegli errori assurdi che mi sfugge |
|
|
|
|
|
#11 | |
|
Senior Member
Iscritto dal: Mar 2004
Messaggi: 16053
|
Quote:
Comunque posta il codice del for che hai scritto. |
|
|
|
|
|
|
#12 | |
|
Member
Iscritto dal: May 2005
Messaggi: 249
|
Quote:
|
|
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Se ad esempio volessimo (per semplificare) trattare solo numeri positivi e di 6 digit, basterebbe una cosa del tipo:
Codice:
int num = 123456;
char digit[10];
int d = 100000, i;
for (i = 0; num != 0; i++, num %= d, d /= 10)
digit[i] = num / d + '0';
digit[i] = '\0';
printf ("%s\n", digit);
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
#14 |
|
Member
Iscritto dal: May 2005
Messaggi: 249
|
e che differenza c'è con il mio??
a parte il modo di scrivere più abbreviato ovvio...
|
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Che nel tuo non vedo l'uso del modulo %, vedo un if che non capisco a cosa serve, vedo una realloc di cui non capisco la necessità.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
#16 |
|
Member
Iscritto dal: May 2005
Messaggi: 249
|
dunque il realloc si riferisce al fatto che non so in partenza di quanto devo allocare l'array....(è ovvio che questa è solo una parte di un codice di un programma...)
l'uso del modulo non serve a mio avviso perché il ciclo si ferma quando i = 1 cioè 10/10... l'if serve a dire che mi deve stampare nell'array solo i caratteri diversi da zero perché come ben sai se faccio 350/1000000000 mi verranno prima un sacco di zeri (essendo divisione tra interi) prima di arrivare a 3 e di acquisire quegli zeri non mi interessa.. se ti sei offeso scusa ma io non ho l'abitudine di copiare ciò che mi scrivono gli altri ma di capire i miei errori altrimenti come divento esperto come te?? graize cmq... ad ogni modo il ciclo for funziona per quantità di elementi da memorizzare...per esempio 350 lui me ne memorizza proprio 3... è solo che 3 me lo stampa ma gli altri due li stampa a caso.. Ultima modifica di white05 : 05-10-2007 alle 16:01. |
|
|
|
|
|
#17 | |
|
Senior Member
Iscritto dal: Mar 2004
Messaggi: 16053
|
Quote:
Nel primo ciclo valido (credo che l'if che hai introdotto serva a quello) prendi la cifra corretta, nel secondo ciclo (supponiamo 350 come valore da inserire in una stringa) esegui 350 / 10 che da 35, 35 al quale viene sommato 48 e da li l'errore. E così per tutte le divisioni successive. Nel secondo ciclo valido dovresti fare 50 / 10 e non 350 / 10, è per questo che il modulo è necessario. |
|
|
|
|
|
|
#18 | |||
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Quote:
Quote:
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) Ultima modifica di andbin : 05-10-2007 alle 16:12. |
|||
|
|
|
|
|
#19 |
|
Member
Iscritto dal: May 2005
Messaggi: 249
|
grazie sirus ora ho capito l'errore, in pratica usavo sempre la stessa somma...
ho provato con il modulo e mi sorge un altro errore...se per esempio mi deve inserire 1023.. lo 0 non lo inserisce e mi inserisce solo 123 |
|
|
|
|
|
#20 | |
|
Member
Iscritto dal: May 2005
Messaggi: 249
|
Quote:
e poi se sforo con l'array[10] che faccio??? si tratta di int possono essere 2^32 numeri ricordi?? da qui la necessità dell'allocazione dinamica
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 12:57.




















