RISOLTO Conversione da intero a char [C]

Velix

Nuovo Utente
26
0
Salve a tutti,
sono un pò di giorni che sto cercando di risolvere questo problema:
data una matricedi interi matrice [n][m], come posso trasferire questi valori in una matrice di caratteri char mat[n][m]?
Ciò che ho fatto è stato sostanzialmente questo:

Codice:
for(int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
        mat[i][j] = matrice[i][j] - '0'; //qui è dove avviene la conversione da interi in caratteri
    }
}
Il problema è che quando stampo i valori della matrice di caratteri mat mi escono simboli "strani" e non ho la più pallida idea del perché succede.
Ci tengo a precisare che non sono un veterano della
programmazione quindi può essere un problema banale per molti
 
Ultima modifica:

Andretti60

Utente Èlite
3,932
2,655
Devi sommare il valore ascii di ‘0’ , non sottrarlo. Ma hai veramente bisogno di tale conversione? Puoi semplicemente convertire il valore durante la stampa.
 

Andretti60

Utente Èlite
3,932
2,655
allora ho sostituito il + al posto del - ed è ok con i valori formati da una sola cifra, ma con i valori a due cifre sono punto e a capo😅
Ecco perché ho detto che non ha senso costruire una seconda matrice.
Mostra il codice che usi per stampare i valori, occorre cambiare quello.
 

Velix

Nuovo Utente
26
0
Ecco perché ho detto che non ha senso costruire una seconda matrice.
Mostra il codice che usi per stampare i valori, occorre cambiare quello.
ecco qui il codice:
Codice:
for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
        printf("%c ", mat[i][j]);
    }
    printf("\n");
}
il programma completo consiste nel cercare dei picchi in determinate sottomatrici... alla fine dovrei ottenere una matrice dove i valori sono i picchi e tutte le altre entrate sono il segno '-'
 

Andretti60

Utente Èlite
3,932
2,655
È quello che avevo pensato, sbagli il formato del printf().
Butta via la seconda matrice che non serve a nulla, tieni solo quella di tipo intero e stampa quella. Cambia il formato in “%d “, che stampa i numeri nel loro tipo (intero)
 

BrutPitt

Utente Attivo
252
245
Aggiungo solo...
se vuoi una stampa incolonnata usa "%Xd", dove X e' un numero intero che identifica lo "spaziamento"

C:
    for(int i=0; i<n; i++) {
        for(int j=0; j<m; j++)
            printf("%3d ", mat[i][j]); // X=3: stampa sempre 3 caratteri, se il numero contiene meno cifre, antepone degli spazi
        printf("\n");
    }
 
Ultima modifica:

bigendian

Nuovo Utente
138
76
Sistema Operativo
Linux
Se guardi un po i "C data type" per x86_64, int sono 32 bit. Per stamparlo, banalmente printf(%d), non serve altro.
Se vuoi ridurre gli interi a carattere, devi carstrarli, comn & 0xff ma non ne vedo il senso.
 

Entra

oppure Accedi utilizzando

Discussioni Simili

Hot del momento