а теперь предложенный код:

я есть следующая функция для фильтрации целочисленных значений и повторного запроса пользователя.

int checkInput0(void){
    int option0,check0;
    char c;

    do{
        printf("Enter the amount of triangles you want to check: \n");

        if(scanf("%d%c",&option0,&c) == 0 || c != '\n'){
            while((check0 = getchar()) != 0 && check0 != '\n' && check0 != EOF);
            printf("[ERR] Invalid number of triangles.\n");
        }else{
            break;
        }
    }while(1);
    // printf("returning the value of option, which is %f", option);
    return option0;  

Тем не менее, я хотел бы расширить эту функцию для фильтрации 0, а также.

Кажется, я что-то упустил. Вся помощь будет принята с благодарностью.

Заранее спасибо!

 BLUEPIXY31 окт. 2017 г., 13:51
...c != '\n' || option0 <= 0
 Peter31 окт. 2017 г., 14:03
вif выписка, добавить чек|| option0 == 0, Кстати, так как вы читаете два значения, используяscanf(), Возможно, чтоscanf() возвращается0, 1, 2, или жеEOF, Если он вернется1, c не был изменен - ​​что приведет к неопределенному поведению на первой итерации цикла.
 Gnqz31 окт. 2017 г., 13:51
Возврат от scanf - это количество элементов, успешно заполненных. Вы не используете это правильно.

Ответы на вопрос(1)

и scanf () и не совсем выполняет желаемую функциональность.

Следующий предложенный код:

проясняет логикуправильно проверяет ошибки ввода / выводасбрасывает неверный вводвыход из программы в случае сбоя ввода-выводаотделяет ввод данных от опустошения 'stdin'

а теперь предложенный код:

do
{
    printf("Enter the amount of triangles you want to check: \n");

    if( scanf( "%d", &option0 ) == 1 )
    {
        if( 0 >= option0 )
        {  // 0 or negative value entered
            printf("[ERR] Invalid number of triangles.\n");
            continue;
        }

        // empty stdin
        while( (check0 = getchar()) != EOF && check0 != '\n' );

        // exit while() loop
        break;
    }

    else
    { // scanf failed
        perror( "scanf for number of triangles failed" );
        exit( EXIT_FAILURE );
    }
} while(1);

Ваш ответ на вопрос