#include<stdio.h>
#include<stdlib.h>

int input, x, c=0;
for (input=1; input<=100; input++)
{
    while(input != 0)
    {
        x = input%10;
        c = c*10 + x;
        input = input/10;
    }
    printf("Reverse Number is : %d", c);
 }

Это обратный числовой код, но этот код выводит минус значение. Почему этот код выводит минусовые значения?

c
0
Bm Aravinthan 26 Ноя 2021 в 11:31
Добро пожаловать в SO. Ваш вопрос в заголовке не соответствует вопросу в теле. Какой вопрос вы хотите задать?
 – 
Gerhardh
26 Ноя 2021 в 11:33
1
Прочтите Как задать вопрос и Обзор. Затем отредактируйте свой вопрос, включив в него свой результат и ожидаемый результат.
 – 
Gerhardh
26 Ноя 2021 в 11:35
1
Как именно этот код имеет смысл? c будет 1, затем 11, затем 111 и так далее, пока не произойдет переполнение, потому что вы продолжаете устанавливать input на ноль. Что должен делать код?
 – 
Lundin
26 Ноя 2021 в 11:36
1
Есть несколько проблем: 1) Вы изменяете переменную цикла внутри цикла. Это испортит внешний цикл. 2) Также вы никогда не сбрасываете c. Вы должны делать это для каждого нового номера. Возможно, вы получите отрицательный результат, потому что переменная переполнена, но без вашего вывода мы не можем сказать.
 – 
Gerhardh
26 Ноя 2021 в 11:36
Где ваша основная функция ()? Предоставьте минимальный воспроизводимый пример.
 – 
kiner_shah
26 Ноя 2021 в 11:45

1 ответ

Лучший ответ

Да, вы абсолютно можете использовать циклы while внутри циклов for. Хотя при этом следует быть осторожным. Я заметил несколько проблем с вашим кодом.

Прежде всего, ваш шаблон неправильный, поэтому странно, что он даже компилируется, поэтому позвольте мне быстро исправить это для вас

#include <stdio.h>
#include <stdlib.h>

int main(void) 
{
    int input, x, c = 0;
    for (input = 1; input <= 100; input++)
    {
        while(input != 0)
        {
            x = input % 10;
            c = c * 10 + x;
            input = input / 10;
        }
        printf("Reverse Number is : %d\n", c);
    }
    
    return 0;
}

Теперь посмотрим, что происходит с переменной input в цикле for:

  1. input = 1
  2. while(input != 0) делает так, когда цикл while заканчивается, input == 0
  3. Цикл for запускается снова, ++input == 1.

Таким образом, в результате цикл for превратился в бесконечный цикл, в котором переменная input всегда равна 1. Чтобы исправить это, нам нужно ввести временную переменную в цикл, чтобы input сохранял свою значение до следующей итерации. Давайте сделаем это.

    for (input = 1; input <= 100; input++)
    {
        int temp = input;
        while(temp != 0)
        {
            x = temp % 10;
            c = c * 10 + x;
            temp = temp / 10;
        }
        printf("Reverse Number is : %d\n", c);
    }

Следующая проблема заключается в том, что нет места, где можно сбросить значение c. Поэтому он становится только больше и в конечном итоге переполняется. Чтобы исправить это, нам нужно сбросить значение c перед запуском цикла while.

    for (input = 1; input <= 100; input++)
    {
        int temp = input;
        c = 0;
        while(temp != 0)
        {
            x = temp % 10;
            c = c * 10 + x;
            temp = temp / 10;
        }
        printf("Reverse Number is : %d\n", c);
    }

Вот и все!

Результат будет таким:

#include <stdio.h>
#include <stdlib.h>

int main(void) 
{
    int input, x, c = 0;
    for (input = 1; input <= 100; input++)
    {
        int temp = input;
        c = 0;
        while(temp != 0)
        {
            x = temp % 10;
            c = c * 10 + x;
            temp = temp / 10;
        }
        printf("Reverse Number is : %d\n", c);
    }
    
    return 0;
}
1
Юки Эндо 26 Ноя 2021 в 13:42