Петля (как переделать програму?) - 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, то программа завершается и выводит сообщение об успешном вводе.