2016-05-26 29 views
6

Questo è il mio codicePerché la printf ("% c", 1) tornare faccina invece di char codificato per 1

#include <stdio.h> 

int x,y; 

int main(void) 
{ 
    for (x = 0; x < 10; x++, printf("\n")) 
     for (y = 0; y < 10; y++) 
      printf("%c", 1); 

    return 0; 
} 

Esso restituisce facce sorridenti. Ho cercato ovunque un codice per faccina o un codice per 1 ma non sono riuscito a trovare alcun collegamento o spiegazione perché il valore char per 1 restituisce faccina, quando il codice ASCII per 1 è SOH. Ho ricercato le risposte a questa domanda ma non ho trovato alcuna risposta che spieghi perché ciò accade.

+2

Avrai intenzione di prendere nota delle informazioni del terminale su cui stai lavorando. Se non pensi che sia importante, ripensateci. – WhozCraig

+1

Cosa intendi indicando le informazioni del terminale. Non ho familiarità con questa espressione. Potresti darmi dei link (tutto quello che ricevo da Google è i terminal dell'aeroporto) – maltkat

+0

Non ho una faccina con questo codice ... – Boiethios

risposta

2

Perché 1 non è un codice di carattere stampabile. Se si vuole '1' è necessario scrivere con il carattere letterale:

printf("%c", '1'); 
      // ^^^ 
+0

L'OP non vuole stampare 1, vuole stampare il carattere il cui ascii è 1 –

+1

@GauravSehgal Beh, come ho detto, non è un carattere stampabile. –

+3

Sì, è vero, ma perché sta ricevendo una faccina? –

2

Se si utilizza un numero, dovrai selezionare un numero di carattere dalla tabella ASCII, se si utilizza un char troverete il char.

Esempio: questo codice stampa il numero di caratteri ASCII 65:

printf("%c", 65); // Outputs: A 

Questo codice stampa la lettera A:

printf("%c", 'A'); // Outputs: A 
+0

Non emette 'A', è stato un errore. – blatinox

+7

'printf ("% c ", 65); // Output: A' - [non sul mio terminale mainframe] (https://en.wikipedia.org/wiki/EBCDIC#Codepage_layout).E questo, ragazzi, è una delle molte ragioni per cui programmare numeri magici è una cattiva idea. – WhozCraig

+0

questo è un esempio –

3

L'uscita varia terminali. Ad esempio, sul mio terminale predefinito OS X, nessun carattere viene emesso.

Nel tuo caso, è presumibilmente in uscita a causa di some historical reasons. In breve, questo è perché la tabella di codici 437, che associa il byte 0x01 a U+263A, è il set di caratteri di MS-DOS.

+0

Grazie! Ho dovuto cercare la tabella codici attiva in cmd per ottenere la mappa dei caratteri che utilizza la mia console di windows (pagina 437) – maltkat

Problemi correlati