I wrote this code to "find if the given character is a digit or not":
#include<stdio.h>
int main()
{
char ch;
printf("enter a character");
scanf("%c", &ch);
printf("%c", ch>='0'&&ch<='9');
return 0;
}
This got compiled, but after taking the input it didn't give any output. However, after changing %c
in the second to last line to the %d
format specifier, it indeed worked. I'm a bit confused as to why %d
worked but %c
didn't, event though the variable is of char
datatype.
Characters in C are really just numbers in a token table. The %c
is mainly there to do the translation between the alphanumeric token table that humans like to read/write and the raw binary that the C program uses internally.
The expression ch>='0'&&ch<='9'
evaluates to 1
or 0
which is a raw binary integer of type int
(it would be type bool
in C++). If you attempt to print that one with %c
, you'll get the symbol table character with index 0 or 1, which isn't even a printable character (0-31 aren't printable). So you print a non-printable character... either you'll see nothing or you'll see some strange symbols.
Instead you need to use %d
for printing an integer, then printf
will do the correct conversion to the printable symbols '1'
and '0'
As a side-note, make it a habit to always end your (sequence of) printf statements with \n
since that "flushes the output buffer" = actually prints to the screen, on many systems. See Why does printf not flush after the call unless a newline is in the format string? for details