Home > Software design >  Simplest Way to Validate a Choice Made by a User
Simplest Way to Validate a Choice Made by a User

Time:02-04

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");
}
  •  Tags:  
  • Related