为什么我的while循环(z == 0)仅设置一次为z == 0后会多次运行?

#include <stdio.h>
int main(void) {

    int x,y,z=0,number,digit;
    char c;
    int sum = 0;
    int temp = 0;

    while (z==0){

        printf("enter 2-9 for hex\n");
        scanf("%c",&c);
        x = (int)c-48;
        if((int)c>49 && (int)c<59){
            printf("enter number");
            scanf("%d",&number);
            break;
        }
        else if ((int)c<50 || (int)c>58){
            printf("wrong number\n");
            z==0;
        }
        else
            printf("error");
            z==0;

    }
while (number != 0) {
        digit = number % 10;
        number = number / 10;
        if (digit >= x) {
            printf("wrong input!!!");
            return 0;
        }
        else {
            int temp1 = temp;
            if (temp1 == 0) {
                digit = digit * 1;
            }
            else {
                while (temp1 != 0) {
                    digit = digit * x;
                    temp1--;
                }
            }
        }
        sum = sum + digit;
        temp = temp + 1;
    }
    printf("\nThe number in Decimal is:%d", sum);

}

这是我的代码,关于将十六进制转换为小数。问题是当我输入2-9时一切都很好,但是当我输入1时,第一个while循环2次,如果我输入10-99,则循环3次,如果我输入100-999,它将循环4次,依此类推...

为什么在我设置Z == 0后它仍然运行多次?