My code functions just fine, but I am working with a somewhat large program and would like to find a simpler/shorter way to do the same thing. I need to validate that a user is entering data that is valid according to what is being asked.
How I am doing it now:
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");
}
}
Is there a shorter way to do this? Thanks.
CodePudding user response:
If you define
#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"
Then it can be very short.
w(v==0){ p(E); s(z, &D); i(D >= 1 && D <= 255) v = 1; e p(z);}
CodePudding user response:
Let's write an indefinite loop, and only break out when a valid input is provided.
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");
}
Worth noting that we haven't checked the return value of scanf.
for (;;) {
printf("Enter Recommended Shot Doses (1-255): ");
if (scanf("%d", &shotDoses) == 1 &&
shotDoses >= 1 && shotDoses <= 255) break;
printf("\n\033[1;31mPlease Enter a Valid Number.\033[0m\n");
}
