Хотя цикл увеличивается и уменьшается - PullRequest
0 голосов
/ 24 января 2019

Я пытаюсь увеличивать и уменьшать значения на основе одного пользовательского ввода в диапазоне 1-9.
Например.если пользователь вводит 5, программа выводит 1234'5'4321.Таким образом, цель состоит в том, чтобы увеличить его с 1 до введенного числа, а затем уменьшить с введенного числа до 1.
В настоящее время я могу увеличивать и уменьшать, но оно уменьшается до 0 вместо 1, а затем выдает ошибку, которую яне собираюсь его производить.Цель состояла в том, чтобы создать это, используя цикл while, и я подозреваю, что моя ошибка генерируется из моего второго вложенного цикла while, но я не уверен, как ее решить.Я попытался изменить условие на «num> 0» с логикой, что декремент должен заканчиваться на 1, но это не решает проблему

while(num != 0 && num <= 9){
        while(i != num){
            i++;
            printf("%d", i);
        }
            while(num != 0){
                num--;
                printf("%d", num);
        }

    }
    printf("Error: Number exceeds range!\n");

Ответы [ 3 ]

0 голосов
/ 24 января 2019

Ваш внешний цикл while допускает отрицательные значения, которых вы, вероятно, хотите избежать, но в любом случае это не нужно для этого примера.

То, что вы хотите сделать, это начать с i на 1 и считайте с условием i < num.Затем вы печатаете 'num', а затем уменьшаете i, а i > 0.В этом случае выведите значение, прежде чем увеличивать или уменьшать его.Итак:

if (num > 0 && num <= 9) {
    int i = 1; // make sure that you actually instantiate i
    while (i < num) {
        printf("%d", i++); // this increments i after using its value
    }
    printf("'%d'", num); // you could also print i, as i == num at this point
    --i; // decrement i below num
    while (i > 0) {
        printf("%d", i--); // this decrements i after using its value
    }
} else {
    printf("Error: Number exceeds range!\n");
}

Используя здесь i++ и i--, возвращается значение i, а затем i увеличивается / уменьшается.Если вы хотите использовать исходное значение i несколько раз, прежде чем увеличивать / уменьшать его, измените его значение как отдельный шаг.

Ваше сообщение об ошибке было напечатано во всех случаях, независимо от того, ошибочно оно или нет.Это связано с тем, что он появился после цикла while, поэтому он всегда выполнялся независимо от того, был ли цикл 1010 * пропущен или введен.Вот почему вы должны использовать оператор if с else для ошибки.

0 голосов
/ 24 января 2019
It works with small modification 
while(num != 0 && num <= 9){
        while(i != num){
            i++;
            printf("%d", i);
        }
            while(num){
               --num;
                if(num)
                printf("%d", num);
        }
}
printf("Error: Number exceeds range!\n");
0 голосов
/ 24 января 2019

Это потому, что вы сначала уменьшаете num, а затем печатаете его.

Когда num = 1 входит в цикл и уменьшается до 0, печатая, таким образом, 0.

if (num != 0 && num <= 9){
        while(i < (num-1)){
            i++;
            printf("%d", i);
        }

        while(num != 0){
           printf("%d", num);
           num--;
        }
    }

Также для внешнего состояния вам не нужно while, что вам нужно, это if.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...