RISOLTO Conversione da intero a char [C]

U

Utente 370715

Ospite
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 da un moderatore:
Soluzione
U
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.

Andretti60

Utente Èlite
6,440
5,091
Devi sommare il valore ascii di ‘0’ , non sottrarlo. Ma hai veramente bisogno di tale conversione? Puoi semplicemente convertire il valore durante la stampa.
 
U

Utente 370715

Ospite
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
6,440
5,091
È 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)
 
  • Mi piace
Reazioni: BrutPitt e BAT

BrutPitt

Utente Attivo
1,166
1,262
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:
U

Utente cancellato 371741

Ospite
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.
 
Soluzione

Ci sono discussioni simili a riguardo, dai un'occhiata!

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili