Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria
vivo X300 Pro rappresenta un'evoluzione misurata della serie fotografica del produttore cinese, con un sistema di fotocamere migliorato, chipset Dimensity 9500 di ultima generazione e l'arrivo dell'interfaccia OriginOS 6 anche sui modelli internazionali. La scelta di limitare la batteria a 5.440mAh nel mercato europeo, rispetto ai 6.510mAh disponibili altrove, fa storcere un po' il naso
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo
Lenovo Legion Go 2 è la nuova handheld PC gaming con processore AMD Ryzen Z2 Extreme (8 core Zen 5/5c, GPU RDNA 3.5 16 CU) e schermo OLED 8,8" 1920x1200 144Hz. È dotata anche di controller rimovibili TrueStrike con joystick Hall effect e una batteria da 74Wh. Rispetto al dispositivo che l'ha preceduta, migliora ergonomia e prestazioni a basse risoluzioni, ma pesa 920g e costa 1.299€ nella configurazione con 32GB RAM/1TB SSD e Z2 Extreme
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti
A re:Invent 2025, AWS mostra un’evoluzione profonda della propria strategia: l’IA diventa una piattaforma di servizi sempre più pronta all’uso, con agenti e modelli preconfigurati che accelerano lo sviluppo, mentre il cloud resta la base imprescindibile per governare dati, complessità e lock-in in uno scenario sempre più orientato all’hybrid cloud
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 05-10-2007, 14:35   #1
white05
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?
white05 è offline   Rispondi citando il messaggio o parte di esso
Old 05-10-2007, 14:47   #2
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da white05 Guarda i messaggi
quel 3 lui nell'array[0] me lo scrive come il carattere corrispondente all'int 3 ma invece deve scrivermi proprio 3
Gli aggiungi '0' (che ha valore 48).
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 05-10-2007, 14:49   #3
Ziosilvio
Moderatore
 
L'Avatar di Ziosilvio
 
Iscritto dal: Nov 2003
Messaggi: 16212
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'
Mi raccomando: fa' attenzione a non confondere '0' (la cifra 0) con '\0' (il carattere nullo).
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" Chi scherza col fuoco si brucia.
Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici
REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu
Ziosilvio è offline   Rispondi citando il messaggio o parte di esso
Old 05-10-2007, 15:13   #4
white05
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!!!!
white05 è offline   Rispondi citando il messaggio o parte di esso
Old 05-10-2007, 15:18   #5
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da white05 Guarda i messaggi
ma se per esempio io ho 3 lui non mi deve scrivere il carattere corrispondente a 3....mi deve scrivere proprio 3!!!!
Allora: 3 è un numero, '3' è un carattere ASCII che ha valore 51.

Quindi che tu scriva:
char c = 51;
char c = '3';
char c = 3 + '0';

è la stessa cosa.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 05-10-2007, 15:20   #6
white05
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...
white05 è offline   Rispondi citando il messaggio o parte di esso
Old 05-10-2007, 15:23   #7
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da white05 Guarda i messaggi
char array[0];
Array di lunghezza zero .... utilissimo.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 05-10-2007, 15:30   #8
white05
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...
white05 è offline   Rispondi citando il messaggio o parte di esso
Old 05-10-2007, 15:32   #9
sirus
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)
stampi a video 3? Se si quello che devi fare è
Codice:
c = n + '0'
e procedendo in questo modo, se dovessimo visualizzare il contenuto ASCII di c vedremmo 51.
sirus è offline   Rispondi citando il messaggio o parte di esso
Old 05-10-2007, 15:38   #10
white05
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
white05 è offline   Rispondi citando il messaggio o parte di esso
Old 05-10-2007, 15:41   #11
sirus
Senior Member
 
Iscritto dal: Mar 2004
Messaggi: 16053
Quote:
Originariamente inviato da white05 Guarda i messaggi
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
Provato a debuggare il programma?
Comunque posta il codice del for che hai scritto.
sirus è offline   Rispondi citando il messaggio o parte di esso
Old 05-10-2007, 15:43   #12
white05
Member
 
Iscritto dal: May 2005
Messaggi: 249
Quote:
Comunque posta il codice del for che hai scritto.
è subito prima del tuo precedente post
white05 è offline   Rispondi citando il messaggio o parte di esso
Old 05-10-2007, 15:44   #13
andbin
Senior Member
 
L'Avatar di andbin
 
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%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 05-10-2007, 15:47   #14
white05
Member
 
Iscritto dal: May 2005
Messaggi: 249
e che differenza c'è con il mio?? a parte il modo di scrivere più abbreviato ovvio...
white05 è offline   Rispondi citando il messaggio o parte di esso
Old 05-10-2007, 15:51   #15
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da white05 Guarda i messaggi
e che differenza c'è con il mio??
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%)
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 05-10-2007, 15:56   #16
white05
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.
white05 è offline   Rispondi citando il messaggio o parte di esso
Old 05-10-2007, 16:00   #17
sirus
Senior Member
 
Iscritto dal: Mar 2004
Messaggi: 16053
Quote:
Originariamente inviato da white05 Guarda i messaggi
e che differenza c'è con il mio?? a parte il modo di scrivere più abbreviato ovvio...
Che il tuo codice non può funzionare, perché è l'algoritmo ad essere sbagliato.
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.
sirus è offline   Rispondi citando il messaggio o parte di esso
Old 05-10-2007, 16:08   #18
andbin
Senior Member
 
L'Avatar di andbin
 
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
Quote:
Originariamente inviato da white05 Guarda i messaggi
dunque il realloc si riferisce al fatto che non so in partenza di quanto devo allocare l'array....
Mazza .... è un gran spreco di memoria allocare un array fisso di una decina di char ......

Quote:
Originariamente inviato da white05 Guarda i messaggi
l'uso del modulo non serve a mio avviso perché il ciclo si ferma quando i = 1 cioè 10/10...
Hai 123456, dividi per 100000 e hai 1, poi dividi per 10000 e ottieni .... 12. Il resto della divisione ti serve!

Quote:
Originariamente inviato da white05 Guarda i messaggi
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..
Allora devi fare un test in più, non credo che basti.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%)

Ultima modifica di andbin : 05-10-2007 alle 16:12.
andbin è offline   Rispondi citando il messaggio o parte di esso
Old 05-10-2007, 16:15   #19
white05
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
white05 è offline   Rispondi citando il messaggio o parte di esso
Old 05-10-2007, 16:16   #20
white05
Member
 
Iscritto dal: May 2005
Messaggi: 249
Quote:
Mazza .... è un gran spreco di memoria allocare un array fisso di una decina di char ......
oh my god non capisco l'ironia....se il programma richiede allocazione dinamica che vuoi da me??? 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
white05 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione vivo X300 Pro: è ancora lui il re della fotografia mobile, peccato per la batteria Recensione vivo X300 Pro: è ancora lui il...
Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'' per spingere gli handheld gaming PC al massimo Lenovo Legion Go 2: Ryzen Z2 Extreme e OLED 8,8'...
AWS re:Invent 2025: inizia l'era dell'AI-as-a-Service con al centro gli agenti AWS re:Invent 2025: inizia l'era dell'AI-as-a-Se...
Cos'è la bolla dell'IA e perché se ne parla Cos'è la bolla dell'IA e perché se...
BOOX Palma 2 Pro in prova: l'e-reader diventa a colori, e davvero tascabile BOOX Palma 2 Pro in prova: l'e-reader diventa a ...
Gigabyte fa marcia indietro? Sparito il ...
Alcuni rivenditori giapponesi bloccano l...
Le feste non placano Amazon, anzi: aggio...
Roborock Q10 S5+ a un super prezzo: robo...
Formula sceglie WINDTRE BUSINESS per gar...
EXPO 1.20: AMD migliora il supporto all'...
MacBook Pro con chip M4, 24GB di RAM e 1...
Lefant M330 da 6.000Pa a 139€ o ECOVACS ...
Tornano gli sconti anche sulle scope ele...
Le scope elettriche Dreame H12, H14 e H1...
Il nucleo della cometa interstellare 3I/...
La Russia potrebbe sviluppare un'arma pe...
Manda la RAM Corsair in assistenza, rice...
ASUS ROG G1000 con 'AniMe Holo': saranno...
Un test di longevità ha messo alla prova...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 13:47.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v