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:
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
4,889
3,532
Devi sommare il valore ascii di ‘0’ , non sottrarlo. Ma hai veramente bisogno di tale conversione? Puoi semplicemente convertire il valore durante la stampa.
 

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
4,889
3,532
È 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)
 
  • Like
Reactions: BrutPitt e BAT

BrutPitt

Utente Attivo
485
442
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

Entra

oppure Accedi utilizzando

Discussioni Simili

Hot: Sei vaccinato? [sondaggio anonimo]

  • Primo ciclo vaccinale completo (1-2 dosi)

    Voti: 461 78.5%
  • Fatta 1a dose, in attesa della 2a

    Voti: 20 3.4%
  • Sono prenotato per la 1a dose

    Voti: 13 2.2%
  • Non so se vaccinarmi

    Voti: 16 2.7%
  • Non ho intenzione di vacciarmi

    Voti: 61 10.4%
  • Fatta anche la terza dose

    Voti: 16 2.7%