Как ограничить ввод целого числа только 2-12? - PullRequest
0 голосов
/ 14 октября 2019

Я хочу строго ограничить ввод пользователя целым числом в этой программе только 2-12. Как мне это сделать?

#include <stdio.h>

int main(){
    int i;
    scanf("%d", &i);
    int diceThrown, diceResult;
    int sum = 0; 
    for(diceThrown = 1; diceThrown <= i; diceThrown++){
        scanf("%d", &diceResult);   //limit this input to 2-12 only, how?
        sum += diceResult;
    }
    if(sum >= 40){
        sum = sum % 40;
        if(sum == 12){
            printf ("28\n");
        } else if(sum == 35){
            printf ("7\n");
        } else{
            printf ("%d\n", sum);
        }
    } else if(sum < 40){
        if(sum == 12){
            printf ("28\n");
        } else if(sum == 35){
            printf ("7\n");
        } else{
            printf ("%d\n", sum);
        }
    }
    return 0;
}

Также, чтобы уточнить, что я все еще новичок в программировании (как только 2 месяца в курсе C.SCi), так что, если вы могли бы объяснить это мне какЯ не эксперт, это было бы здорово.

Ответы [ 2 ]

1 голос
/ 14 октября 2019

scanf не имеет функции, чтобы делать то, что вы хотите. Вы можете просто использовать if для проверки ввода.

if(scanf("%d", &diceResult) != 1 || diceResult < 2 || diceResult > 12) {
//handle invalid input here
}

Если ввод неверен, это зависит от вас, что вы хотите сделать. Вы можете проигнорировать ввод и попросить пользователя ввести действительное число, вы можете выйти из всей программы или просто проигнорировать ошибку, или что-то еще полностью.

Вы также можете повторно проверить ввод с помощью while:

while(scanf("%d", &diceResult) != 1 || diceResult < 2 || diceResult > 12) {
//prompt user to enter valid input here
}

Как упомянуто chux, частью обработки неверного ввода будет вычисление неверного ввода и проверка EOF.


scanf("%d", &diceResult) != 1 будет гарантировать, что scanfна самом деле прочитал ровно одно число, и ошибок синтаксического анализа не произошло.
0 голосов
/ 14 октября 2019

Учитывайте следующее:

#include <stdio.h>

int main(){
    int x;
    do
    {
        printf("give a number between [2-12]\n");
        scanf ("%d",&x);
    }
    while(x<2 || x>12);
    return 0;
}

Вы можете использовать цикл do-while, чтобы принимать значения только в диапазоне от 2 до 12. Таким образом, вы можете заставить пользователя указать целое число в качестве ввода, которое находится в диапазоне, который вы запрашиваете, в этом случае из [2,12]. В противном случае программа вернется назад и снова запросит допустимый ввод.

...