Search code examples
cloopsif-statementinfinite

Input control(infinite loop problem,c programming)


I keep getting values ​​as long as the user does not enter a positive integer (and I control if user entered negative values or if user entered an integer). I try to do it without using isdigit, it enters an infinite loop when I enter a character.

int quantity;
        
printf("Please enter term(s) number");
scanf("%d",&quantity);
while( 1){
    if(quantity<0){
        printf("Please enter “positive”  number");
        scanf("%d",&quantity);
    }

    if(!(quantity>='0' && quantity<='9')){
        printf("Please enter “a”  number");
        scanf("%d",&quantity);
    }
}

Solution

  • Use fgets() to get an entire line. You use strtol() to parse the line as an integer, checking if it consumed the entire line.

    char *end;
    char buf[LINE_MAX];
    
    do {
         if (!fgets(buf, sizeof buf, stdin))
            break;
    
         // remove \n
         buf[strlen(buf) - 1] = 0;
    
         int n = strtol(buf, &end, 10);
    } while (end != buf + strlen(buf));