Петля (как переделать програму?) - C (СИ)
Формулировка задачи:
Програма должна то количество «*», которое задает пользователь, но в пределах от 1 до 20. Если пользователь вводит 0, пронрамма останавливаеться и выдает сообщение «Thanks and bye!»
Если пользователь вводит значение больше 20 или меньше 0 программа должна выдать сообщение «invalid input!» и запросить следующий ввод.
Проблема в том, что не могу выполнить последнее условие без прерывания петли.
Подскажите, пожалуйста, как это реализовать.
Спасибо.
#include<stdio.h> int main(void) { int i=0; int asterisks; printf("Enter a number between 1 and 20 ( Enter 0 to end) :"); scanf("%d", &asterisks); for(i=0; i<asterisks; i++) printf("%c ", '*'); while(asterisks!=0) { printf("\nEnter a number between 1 and 20 ( Enter 0 to end) :"); scanf("%d", &asterisks); /* if(asterisks>=21 || asterisks<0) printf("invalid input!");*/ for(i=0; i<asterisks; i++) printf("%c ", '*'); } if(asterisks==0) printf("\nThanks and bye!"); return 0; }
Решение задачи: «Петля (как переделать програму?)»
textual
Листинг программы
while(1 != scanf("%d", &asterisks) || asterisks < 1 || asterisks > 20){ puts("invalid input!Try again"); while(getchar() != '\n'); }
Объяснение кода листинга программы
- Происходит бесконечный цикл while(1), который завершается только при выполнении условия внутри скобок.
- Условие внутри скобок требует ввода целого числа от 1 до 20 и проверки его на корректность.
- Если условие не выполняется, то выводится сообщение об ошибке и происходит пропуск символа новой строки с помощью функции getchar().
- Если условие выполняется, то переменная
asterisks
получает значение введенного числа. - Введенное число проверяется на выход за пределы от 1 до 20. Если число выходит за эти пределы, то программа возвращается к шагу 2.
- Если число в пределах от 1 до 20, то программа завершается и выводит сообщение об успешном вводе.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д