2015-05-03 2 views
-1

Я хочу прочитать положительное целое число от пользователя. Если пользователь вводит что-то еще, я хочу снова спросить. Я сделал это, когда пользователь ввел отрицательное число. Но если пользователь вводит символ или что-то еще, что мне делать?Чтение числа от пользователя

int main (){ 
    int takennumber; 
    int number,multiplication,divisor,result,total=0; 

    printf("Please,enter a integer number: "); 
    scanf("%d",&takennumber); 

    for(;takennumber<=0;) 
    { 
     printf("Wrong value! Please reenter: "); 
     scanf("%d",&takennumber); 
    } 

ответ

0

scanf возвращает количество успешно отсканированных значений. При попытке сканирования int но пользователь вводит char, scanf вернет 0. Вы должны переместить вызов scanf в состояние цикла и проверить возвращаемое значение:

printf("Enter a positive integer: "); 
while (scanf("%d", &takennumber) < 1 || takennumber <= 0) 
    printf("Wrong value! Please reenter: "); 
0

Почему не грубой силой, если бы вы требуется полный контроль обработки ввода (при условии, что вам нужна база 10):

char buf[BUFSIZ], *p = buf; 
char *retPtr; 
unsigned long val; 
Prompt(); 
while(fgets(buf, sizeof(buf)-1, stdin) { 
    p = buf; 
    while(isspace(*p)) p++); 
    errno = 0; /* just in case errno isn't cleared in strtoul - may not be needed */ 
    /* strtoul used instead of strtol, to disallow negative number */ 
    val = strtoul(p, &retPtr, 10); /* 10 assumes base 10 only */ 
    /* strtoul returns value AND there no failure condition, we are good */ 
    if (errno == 0 || (val == LONG_MIN || val == LONG_MAX)) { 
     /* See if anything follows the number on the line */ 
     if (*retPtr == '\n' || *retPtr == '\0') { 
      break; // valid 
     } 
    } 
    printf("Error message of your choice\n"); 
    Prompt(); 
}