View Full Version : [C] Conversione di un intero in codice ASCII
Lucariello96
28-10-2013, 15:34
Salve..
Vorrei chiedervi se ho un numero intero e voglio risalire al suo codice ASCII come devo fare??
con i caratteri è facile, basta leggere ogni carattere con %d, ma dato che gli interi gia vengono letti con %d, come faccio a stampare il codice ASCII di un numero intero??
Oppure devo per forza dichiarare la variabile in stringa?
[Kendall]
28-10-2013, 15:50
Salve..
Vorrei chiedervi se ho un numero intero e voglio risalire al suo codice ASCII come devo fare??
con i caratteri è facile, basta leggere ogni carattere con %d, ma dato che gli interi gia vengono letti con %d, come faccio a stampare il codice ASCII di un numero intero??
Oppure devo per forza dichiarare la variabile in stringa?
Suggerimento, guarda la posizione dei caratteri numerici nella tabella ASCII:
http://www.larapedia.com/tabella-ascii-completa/tabella_ascii_completa.gif
Lucariello96
28-10-2013, 15:54
lo so quindi?
ho provato con la stringa di caratteri e i numeri nn riesco a leggerli..
non so come fare a leggere questi cavolo di numeri... potreste scrivermi come fare per favore?
Ma tu sei quello che ha 9 in informatica? Mi sa che il tuo prof. è un po' largo coi voti :D Poi però avrai 0 in matematica...cosa alquanto strana dato che sono collegate sotto molti aspetti.
Ti è stata postata la tabella ascii, sono 255 caratteri. Basta fare una semplice operazione matematica.
Saluti.
Lucariello96
28-10-2013, 16:08
Se apprendo le cose le faccio subito mie.. se mi dite come fare..
cmq in matematica è vero che sono poco buono :D
cmq forse ho capito basta aggiungere 48 al numero?
però io volevo capire se c'era un comando per farlo automatico...
Si abbiamo capito che apprendi facilmente ma qui si tratta di logica...non di apprendere una nozione matematica o istruzione C che per quello che devi fare non esiste.
Detto questo,
non capisco però perché ti serve sta cosa. Se tu chiedi con la scanf un carattere, quindi usi %c...puoi immettere anche un numero e quindi la printf che usi (con %d) ti stampa il codice ascii giusto anche dei numeri, è matematica...
Se invece sei obbligato ad usare nella scanf il %d, quindi un numero, ci sei arrivato, +48 ;)
Lucariello96
28-10-2013, 16:23
Guarda non so se hai letto il post principale dove ho scritto " Oppure devo per forza dichiarare la variabile in stringa?"
Lo sapevo che posso farlo con la stringa, infatti così l'avevo fatto... e anche con il +48 l'avevo capito.. il fatto e che volevo sapere solo se c'era un comando per farlo automaticamente visto che nel C non finisco mai di scoprire nuovi comandi che automatizzano molte operazioni...
Usiamo i giusti termini. In C il tipo stringa non esiste. Quello che tu fai lo fai con un carattere (tipo char).
Alla tua domanda ho risposto, non esiste una funzione della libreria. Non avrebbe nessun senso.
Lucariello96
28-10-2013, 16:27
Piuttosto ora mi è apparso un altro dubbio... se voglio utilizzare la tecnica +48, come faccio ad utilizzarla sui singoli numeri?
cioè ho il numero 2354, come lo scompongo in numeri singoli?
se per le stringhe utilizziamo %c e lavoriamo sui caratteri delle stringhe per un numero intero come si fa?
Nel caso di un numero composto da più cifre dipende da come lo prendi in input. Se prendi un numero anche qui è matematica...fai un ciclo e una divisione per prenderti le singole cifre. (Ti lascio a te scroprire come).
Se invece prendi una stringa (%s), dovrai usare un vettore (ma dubito tu li abbia studiati).
Lucariello96
28-10-2013, 16:44
Forse divido per 10 100 1000 ecc... e prendo solo la parte intera del numero??
cmq per la stringa già ho risolto...
per la stringa uso un vettore stringa, e lo vado a leggere in un doppio ciclo, nel ciclo esterno vado a calcolare quanti elementi ha quel campo del vettore usando strlen(vett[i]), e poi nel ciclo interno scompongo i caratteri singoli con %c e utilizzando vett[i][j] ...
a tutto questo ci sono arrivato con la "logica" e senza spiegazioni, ne niente..
No. La divisione che hai in mente non va bene...tu non sai quante cifre ha il numero.
Devi usare due divisioni matematiche. La divisione resto (operatore %) e la divisione normale. La prima ti prende l'ultima cifra, l'altra (sempre /10) di toglie (essendo un intero) sempre l'ultima cifra...fai un ciclo finché quella divisione è 0 (cioè hai tolto tutte le cifre...).
Per la parte relativa alla stringa...non so come possa funzionare. La stringa ha una dimensione [i]. Perché usi una stringa con due dimensioni (matrice)? [i][j].
Ti basta un solo indice in un unico for/while.
PS. Studia, anche matematica. La divisione con resto dovresti saperla in quarta superiore. Senza matematica di programmi non ne scrivi. Non serve a nulla sapere tutte le funzioni standard del C.
Lucariello96
28-10-2013, 16:53
Saprai bene che quando dichiari una stringa usi char stringa[50][50]..
dichiari il max dei campi che può avere una stringa e il max dei caratteri che può contenere ogni campo... ebbene provando da me, ho dedotto di lavorare normalmente sul vettore, ma quando mi serve singolo apro un ciclo annidato dove faccio scorrere carattere per carattere di ogni campo....
for(i=0;i<n;i++){
x=strlen(stringa[i]);
for(j=0;j<x;j++){
printf("%c ",stringa[i][j]);
}
}
Quella non è una stringa ma un vettore di vettori (singola stringa).
Tu stai dichiarando una matrice 50x50, ovvero 50 righe [i] lunghe 50 caratteri ciascuna [j]. (50 righe per 50 colonne)
Poi se rileggi bene quello che hai scritto: "il max dei campi che può avere una stringa" che vuol dire?"
Edito: ho visto ora il codice ed è corretto ma non si capisce perché tu lo debba usare. Stavamo parlando di semplici stringhe. Non di N stringhe prese in input e messe per non si sa quale motivo (non ce lo hai detto) in quella struttura.
PS.Come tu possa avere 9 in sistemi/informatica non l'ho ancora capito. Davvero, non prenderlo come un'offesa, ma studia, soprattuto su un supporto che ti fa fare tutto per gradi, hai una grande confusione in testa.
Lucariello96
28-10-2013, 17:01
none... la matrice di una stringa si dichiara con 3 dimensioni tipo char stringa[50][50][50]... io non lavoro sulle dimensioni riga e colonna, ma lavoro su dimensione di riga e di caratteri... cmq già lo fatto e mi funziona...
sto facendo un programma che permetta di convertire tra di loro numeri stringhe codice ASCII, codice Esadecimale, e poi credo aggiungerò binario e ottale..
Cmq per quanto riguarda la divisione per resto già ci ho lavorato sopra.. però non ho ben capito come funziona come hai detto tu... non potresti scrivere il codice così mi è più chiaro?
PS: io voglio capire le cose in modo semplice...poi me le vado ad applicare io...
none... la matrice di una stringa si dichiara con 3 dimensioni tipo char stringa[50][50][50]...
Ma che è sta roba? Siamo passati ad un bel cubo? :D
Quella è una matrice a 3 dimensioni.
Ora tu sei in 4 superiore e da quello che si evince non sai molto, fino a prova contraria so più di te sicuramente ;)
char stringa[] = "ciao"; // non servono le altre dimensioni
char stringa_1[20]; //stringa lunga al max 20 caratteri
Per l'operatore % vallo a studiare da solo e poi torna.
Lucariello96
28-10-2013, 17:17
Già le conosco le stringhe oddio...
char stringa (Variabile stringa con 1 carattere unico)
char stringa [20] (Variabile stringa con max 20 caratteri)
char stringa [20][20] (Vettore stringa con 20 campi e caratteri)
char stringa [20][20][20] (Matrice 20x20, con ogni campo max 20 caratteri)
ricordati che c'è sempre una dimensione che dichiara il numero di caratteri!!
e il % , ovvero il modulo per calcolare il resto già lo conosco e già lo utilizzato.. esempio 10%2 = 10:2= 5 con resto di 0 --> 10%2=0.. se c'era resto è uguale a 1
Io mi ricordo benissimo e so cosa sono quelle dichiarazioni.
Il fatto di dovere usare per quello che devi fare una matrice anche solo a 2 dimensioni (non scomodiamo quella a 3) denota che hai perso pezzi per strada.
Prova a fare %10 e vedi che succede...poi fai /10 e vedi che succede e poi fai ancora %10 e così via.
Lucariello96
28-10-2013, 17:43
ancora con questa matrice!! XD
non è una matrice!! lavoro sui caratteri, hai pure detto che ho fatto bene prima..
cmq ti ripeto per l'ennesima volta so a cosa serve il modulo... %10 ti divide il numero per 10 e poi ti calcola il resto che è compreso tra 0 e 9.. /10 invece divide semplicemente per 10 e ti dice quanto fa senza darti il resto..
[Kendall]
28-10-2013, 18:00
char stringa (Variabile stringa con 1 carattere unico)
char stringa [20] (Variabile stringa con max 20 caratteri)
char stringa [20][20] (Vettore stringa con 20 campi e caratteri)
char stringa [20][20][20] (Matrice 20x20, con ogni campo max 20 caratteri)
Non ho capito questa parte...
In particolar modo la terza e quarta riga. Secondo la tua interpretazione cosa dovrebbero rappresentare?
Lucariello96
28-10-2013, 18:04
credo di aver capito.. facendo il %10 , mi arriva sempre a calcolare il resto e quindi l'ultima cifra.. una volta calcolato, divido il numero per 10, e gli tolgo un numero intero, fino a che non arrivo a 0...
Ho imparato una cosa nuova da utilizzare anche in altre operazioni simili... Gracias :D
PS x Kendall: la terza parte rappresenta numero di righe, numero colonne, e il numero max di caratteri in ogni campo della matrice...
Ma scusate voi come dichiarate una matrice stringa?? cioè questo non me lo sto inventando è cosi per quello che so... poi se avete altri modi non so..
[Kendall]
28-10-2013, 18:32
Quello che non capisco è cosa tu intenda per "matrice stringa".
Intendi matrice DI stringhe? (che già acquista più senso)...
Comunque in C una stringa non si dichiara mai come array di char, ma bensì come un puntatore a char ( char* ).
Prima di tutto bisogna capire cosa, nel C, è definibile come stringa. E nel caso di questo linguaggio è "una serie di caratteri null-terminated", ovvero aventi come ultimo carattere il carattere nullo ( \0 ). Questo ti fa pertanto capire come un array di char può benissimo NON essere una stringa (come esserlo se contiene almeno un carattere nullo), ed è comunque fuorviante definire una stringa come un array di char.
Il fatto che le due "strutture" siano compatibili è dovuto al fatto che a conti fatti il nome di un array di char è a tutti gli effetti un puntatore costante a char* (costante perchè il suo indirizzo non può essere riassegnato), ma è comunque sempre meglio ed ottima pratica distinguere le due cose, e definire le stringhe sempre come puntatori a char.
Sono concetti già un pò più avanzati ma dovrai prima o poi scontrartici.
Lucariello96
28-10-2013, 18:42
si il fatto che finisca con \0 lo sapevo.. cmq il fatto e che ancora devo approcciarmi ai puntatori.. infatti stavo iniziando a vederli già, poi dovevo fare questo programma dove ho dovuto imparare altre cosette e ho stoppato...
il mio prof già mi ha accennato che i puntatori è un argomento delicato, ma che se si impara a lavorare bene con i puntatori, si è ad un buon punto...
Mica potete suggerirmi qualche buona guida per imparare bene ad utilizzare i puntatori??
Se non imparo da solo le cose non faccio nulla, perchè a scuola si ripetono sempre e solamente vettori e matrici per quei buoni a nulla che non vogliono fare niente e per colpa loro bloccano chi come me vuole studiare e andare avanti...
cmq per ora lavoro così con le stringhe, dato che non so utilizzare i puntatori..
credo di aver capito.. facendo il %10 , mi arriva sempre a calcolare il resto e quindi l'ultima cifra.. una volta calcolato, divido il numero per 10, e gli tolgo un numero intero, fino a che non arrivo a 0...
Ho imparato una cosa nuova da utilizzare anche in altre operazioni simili... Gracias :D
PS x Kendall: la terza parte rappresenta numero di righe, numero colonne, e il numero max di caratteri in ogni campo della matrice...
Ma scusate voi come dichiarate una matrice stringa?? cioè questo non me lo sto inventando è cosi per quello che so... poi se avete altri modi non so..
La parola matrice stringa come ti ha detto kendall non esiste, non ha senso ed è sbagliato continuare a parlarne.
La quarta dichiarazione è un cubo di 20x20x20 caratteri. Non c'entrano nulla le stringhe se come ha detto kendall stringhe non sono (senza '\0' finale).
Lucariello96
28-10-2013, 19:21
si ma al di là di quello che dici, è o non è, per ora io lavoro così e funziona tutto, ora corretto o non corretto, l'importante è che per quello che mi serve vanno bene così... quando arriverò a livelli più avanzati, svilupperò anche il mio modo di programmare... piano piano...
Cmq airon 20x20x20 utilizzando i puntatori è un cubo perchè nei puntatori si lavora in modo dinamico e si utilizza la dimensione che serve al momento, mentre come lavoro io senza puntatori, bisogna impostare una dimensione apposita per la grandezza del campo...
io lavoro in modo statico mentre con i puntatori si lavora in modo dinamico..
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.