Member 14955513 Ответов: 3

Функция Return true/false функция всегда возвращает true


Я новичок, и я пытаюсь написать функцию, которая проверяет, находится ли число в заданном интервале. Если это так, то программа должна возвращать true, иначе-false. По какой-то причине вывод всегда будет "Process returned 1", независимо от того, какие значения я присваиваю переменным. Делает ли возвращение что-то еще, чем я думаю, или в чем проблема?

Что я уже пробовал:

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

int IsInRange(int number, int high, int low){
    if (low <= number && number <= high){
        return true;
    }
    else{
        return false;
    }
}

int main()
{
    int x, low = 15, high = 25, number = 2;
    return IsInRange(low, high, number);

    return 0;
}

3 Ответов

Рейтинг:
27

OriginalGriff

Условие, которое вы используете, не дает ожидаемых результатов:

low <= number <= high

На самом деле оценивает как либо
(low <= number) <= high
Или
low <= (number <= high)
Так как в результате a <= b всегда будет только ноль или ненулевой (и, скорее всего, 0 или 1) результат не тот, что вы ожидали.
Попробуйте вместо этого:
if (low <= number && number <= high)


Member 14955513

если ((низкий &ЛТ;= количество) и усилитель; & (количество &ЛТ;= высокая))

Изменил его таким образом, но теперь он возвращает true только тогда, когда число == низкое.

"Процесс вернул 1 (0*1)"

OriginalGriff

Это происходит потому, что вы передаете значения в неправильном порядке ... проверьте имена в списке вызовов на соответствие параметрам в функции.
Когда вы вызываете функцию, ее параметры передаются по порядку в переменные, названные в объявлении функции, независимо от имен во "внешнем мире".

инт IsInRange(число int, высокий инт, инт низкий){
...
вернуться IsInRange(минимум, максимум, количество);

Тебе нужно:

инт IsInRange(число int, высокий инт, инт низкий){
...
return IsInRange(число, максимум, минимум);

Рейтинг:
1

Patrice T

int IsInRange(int number, int high, int low){
    if (low <= number <= high){ // this is not c
        return true;
    }
    else{
        return false;
    }
}

В большинстве языков программирования двойное условие записывается как 2 простых условия с логической операцией между ними.
int IsInRange(int number, int high, int low){
    if (low <= number && number <= high){
        return true;
    }
    else{
        return false;
    }
}

что означает: (low <= number) и (number <= high)
[Обновление]
Кстати, позиция аргументов имеет значение !
int IsInRange(int number, int high, int low)
...
return IsInRange(low, high, number);


Member 14955513

Изменил его таким образом, но теперь вывод верен только тогда, когда число == низкое

Patrice T

Покажите свой новый код.

Member 14955513

#включить <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

инт IsInRange(число int, высокий инт, инт низкий){
если ((низкий &ЛТ;= количество) и усилитель; & (количество &ЛТ;= высокая)){
вернуть true;
}
еще{
возвращать false;
}


}

тап_п()
{
int x, low = 20, high = 30, number = 21;
вернуться IsInRange(минимум, максимум, количество);



возвращает 0;
}

Patrice T

Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.
Чтобы каждый мог обратить внимание на эту информацию.

Рейтинг:
1

Rick York

Я предпочитаю писать код в очень простых терминах. Я бы сделал это вот так :

int IsInRange( int number, int high, int low )
{
    if( number < low )
       return false;
    else if( number > high )
       return false;
    else
       return true;
}
и вы можете это проверить :
int main()
{
    const char * str;
    int result;
    int low = 15;
    int high = 25;
    int n;
    for( int n = 10; n <= 30; ++n )
    {
        result = IsInRange( n, low, high );
        if( result )
           str = "true";
        else
           str = "false";
        printf( "when n is %d  result is %s\n", n, str );
    }
}