Мой код работает нормально, но я работаю с довольно большой программой и хотел бы найти более простой/короткий способ сделать то же самое. Мне нужно проверить, что пользователь вводит данные, которые действительны в соответствии с тем, что спрашивают.
Как я это делаю сейчас:
while(validDoses == 0) {
printf("Enter Recommended Shot Doses (1-255): ");
scanf(" %d", &shotDoses);
if(shotDoses >= 1 && shotDoses <= 255) {
validDoses = 1;
}
else {
printf("\n\033[1;31mPlease Enter a Valid Number.\033[0m\n");
}
}
Есть ли более короткий способ сделать это? Спасибо.
2 ответа
Если вы определите
#define p printf
#define s scanf
#define E "Enter Recommended Shot Doses (1-255): "
#define D shotDoses
#define v validDoses
#define N "\n\033[1;31mPlease Enter a Valid Number.\033[0m\n"
#define w while
#define e else
#define i if
#define z " %d"
Тогда он может быть очень коротким.
w(v==0){ p(E); s(z, &D); i(D >= 1 && D <= 255) v = 1; e p(z);}
Давайте напишем неопределенный цикл и разорвемся только тогда, когда будет предоставлен допустимый ввод.
for (;;) {
printf("Enter Recommended Shot Doses (1-255): ");
scanf("%d", &shotDoses);
if (shotDoses >= 1 && shotDoses <= 255) break;
printf("\n\033[1;31mPlease Enter a Valid Number.\033[0m\n");
}
Новые вопросы
c
C - это язык программирования общего назначения, используемый для системного программирования (ОС и встраиваемых), библиотек, игр и кроссплатформенности. Этот тег следует использовать с общими вопросами, касающимися языка C, как это определено в стандарте ISO 9899 (последняя версия 9899: 2018, если не указано иное, а также для запросов, специфичных для версии, с c89, c99, c11 и т. Д.). C отличается от C ++ и не должен сочетаться с тэгом C ++ без разумной причины.
scanf
.space
в" %d"
лишний. Спецификатор преобразования"%d"
уже отбрасывает начальные пробелы. На самом деле все спецификаторы преобразования, ЗА ИСКЛЮЧЕНИЕМ"%c"
,"[...]"
и"%n"
, отбрасывают начальные пробелы.