Лучший способ напечатать результат bool как "false" или "true" в c?

Мне нужно написать программу, в которой main вызывает другие функции, которые проверяют серию чисел, если они меньше числа, если все номера рядов находятся между двумя пределами, а если есть отрицательные. Мой код возвращает значения 1 для true и 0 для false, но задание требует, чтобы они были напечатаны как "true" или "false". Я не уверен, как получить ответы bool для печати в виде строки из printf. Я использовал if (atl == false) printf ( "false" ); в моем at_least.c и в main.c, но он возвращает только длинную строку true или false (ex: truetruetrue....). Я не уверен, что это правильное кодирование, и я помещаю его в неправильное место, или мне нужен другой код.

Это мой main.c:

#include "my.h"

int main (void)

{
    int     x;
    int     count    = 0;
    int     sum      = 0;
    double  average  = 0.0;
    int     largest  = INT_MIN;
    int     smallest = INT_MAX;
    bool    atlst    = false;
    bool    bet      = true;
    bool    neg      = false;
    int     end;

    while ((end = scanf("%d",&x)) != EOF)
        {
            sumall(x, &sum);                           //calling function sumall
            count++;
            larger_smaller(x, &largest, &smallest);    //calling function larger_smaller
            if (atlst == false)
               at_least(x, &atlst);                    //calling function at_least if x < 50
            if (bet == true)
               between(x, &bet);                       //calling function between if x is between 30 and 40 (inclusive)
            if (neg == false)
               negative(x, &neg);                      //calling function negative if x < 0
        }
    average = (double) sum / count;         
    print(count, sum, average, largest, smallest, atlst, bet, neg);
    return;
 }

мои результаты для набора чисел:

The number of integers is:           15
The sum is               :         3844
The average is           :       256.27
The largest is           :          987
The smallest is          :          -28
At least one is <  50    :            1     //This needs to be true
All between  30 and  40  :            0     //This needs to be false
At least one is negative :            1     //This needs to be true

Это в C, что, похоже, не может найти многого.

Заранее благодарим за помощь!

ДОПОЛНЕНИЕ:

Это повторяется из ответа ниже.

Это работало для at_least и отрицательных функций, но не для функции. У меня

void between(int x, bool* bet) 
  { 
    if (x >= LOWER && x <= UPPER) 
        *bet = false; 
    return; 
  }

как мой код. Я не уверен, что случилось.

Ответ 1

Вы можете использовать оператор C условного (или тройного):

  (a > b) ? "True" : "False";

или, возможно, в вашем случае:

  x ? "True" : "False" ;

Ответ 2

Альтернативная версия без ветвления:

"false\0true"+6*x

Ответ 3

x ? "true" : "false"

Вышеприведенное выражение возвращает char *, поэтому вы можете использовать это:

puts(x ? "true" : "false"); или printf(" ... %s ... ", x ? "true" : "false");

Вы можете сделать макрос для этого.

Ответ 4

А как насчет этого:

#include <stdio.h>

#define BOOL_FMT(bool_expr) "%s=%s\n", #bool_expr, (bool_expr) ? "true" : "false"

int main(int iArgC, char ** ppszArgV)
{
    int x = 0;
    printf(BOOL_FMT(x));

    int y = 1;
    printf(BOOL_FMT(y));

    return 0;
}

Выдает следующее:

x=false
y=true

Использование этого с помощью типа bool, но int должно работать одинаково.