Masz zmienną typu char (1 bajt rozmiaru) i podajesz wskaźnik do niej w scanf. Jednak w formacie dla scanf podałeś %d, więc interpretuje ten wskaźnik do zmiennej typu int (4/8 bajtów). Najprowdopodobnie korzystasz z architektury x86, co onzacza, że pierwszy bajt odpowiada najwyższej części liczby, a ostatni najmniejszej. Zatem twoja liczba znajduje się dopiero parę bajtów dalej, natomiast bajt, który odczytujesz jest wyzerowany, bo wpisałeś niedostatecznie dużą liczbę. Jakbyś wpisał w większą, coś by ci się innego wyświetliło.
Aby uniknąć takich sytuacji, jak słusznie zauważono wyżej, włącz i zwracaj uwagę na ostrzeżenia. Dobrą praktyką jest -Werror nie przepuszczać ostrzeżeń nigdy. Nawet jeśli dostajesz ostrzeżenie w kodzie, który działa jak powinien, zmodyfikowanie kodu, żeby ostrzeżenia nie było, to przeważnie kwestia dodania nawiasu lub rzutowania. Zaś jak się zacznie olewać ostrzeżenia to już się olewa je zawsze. Nie warto.