Наличие нескольких циклов без изменения значения x после первого цикла?

#c #loops #integer #scanf

#c #циклы #целое число #scanf

Вопрос:

Я не знаю, действительно ли это имеет смысл, но я пытаюсь повторно использовать исходное значение x из scanf() во втором цикле, чтобы он мог печатать то, что ему нужно для печати, но мне трудно понять это. Есть ли способ в C (я все еще новичок) сделать это без использования функций?

 int main(){
    int x;
    int res1 = 0, res2 = 0;
    scanf("%u", amp;x);

    //reverse the digits of a number
    if (x == 0) {
        res2 = 1;
    }

    while (x != 0) {
        if (x % 10 == 0) {
            res2  ;
            x /= 10;
        }
        else {
            x /= 10;
        }
    }
    
    //count number of zeroes in a number using the same value from the scanf()
    do {
        res1 = res1 * 10   x % 10;
        x = x / 10;
    } while (x != 0);
    printf("%u %un", res1, res2);
}
  

Комментарии:

1. «я пытаюсь повторно использовать исходное значение x». Определите другую переменную и сохраните оригинал x в этой переменной.

2. это должно быть scanf("%d", amp;x); или scanf("%i", amp;x); .. "%u" для unsigned int

3. scanf() это функция, поэтому вы не можете использовать значения из scanf() без функций.

Ответ №1:

Чтобы сохранить значение x , вы не должны меняться x . /= оператор изменяет значение левого операнда (если только не является правым операндом 1 ).

Попробуйте это:

 int main(){
    int x, x_work;
    int res1 = 0, res2 = 0;
    scanf("%u", amp;x);

    //reverse the digits of a number
    if (x == 0) {
        res2 = 1;
    }

    x_work = x;
    while (x_work != 0) {
        if (x_work % 10 == 0) {
            res3  ;
            x_work /= 10;
        }
        else {
            x_work /= 10;
        }
    }
    
    //count number of zeroes in a number using the same value from the scanf()
    do {
        res1 = res1 * 10   x % 10;
        x = x / 10;
    } while (x != 0);
    printf("%u %un", res1, res2);
}
  

Или вы можете просто удалить часть, которая уничтожает значение x , потому res3 что измененное там не используется в более позднем процессе.

 int main(){
    int x;
    int res1 = 0, res2 = 0;
    scanf("%u", amp;x);

    //reverse the digits of a number
    if (x == 0) {
        res2 = 1;
    }

    //count number of zeroes in a number using the same value from the scanf()
    do {
        res1 = res1 * 10   x % 10;
        x = x / 10;
    } while (x != 0);
    printf("%u %un", res1, res2);
}