No corresponde echarle la culpa al compilador cuando el código está mal construido AUNQUE funcione en algunos casos.
De hecho, esta misma discusión se debe a que existe un comportamiento aparentemente errático, ¿no?
Si uno pudiera mirar la variable numero asi (por ejemplo si el usuario hubiera ingresado "57"
Código pseudo:
Ver originalnumero = | 5 | 7 | \0 | basura | basura | basura ... | ... | ultimo caracter
y quieres saber desde que posicion hasta que posicion revisar los numeros, TIENES que partir desde la izquierda
Código pseudo:
Ver originalnumero = | 5 | 7 | \0 | basura | basura | basura ... | ... | ultimo caracter
------->
no desde la derecha
Código pseudo:
Ver originalnumero = | 5 | 7 | \0 | basura | basura | basura ... | ... | ultimo caracter
<----------------
porque la basura que haya puede interferir en tu lógica.
Aquí da lo mismo la inicializacion de la variable numero, es el recorrido que se hace el problema.
Da lo mismo la inicializacion porque SIEMPRE se esta leyendo algo (con scanf), PERO scanf rellena a numero DE IZQUIERDA A DERECHA.
Leerlo en el otro sentido producirá problemas. Si no los produce es SUERTE (o mala suerte, depende del punto de vista)